面试记录2

1、activity怎么与service通信?

首先注意Service有两种类型:

本地服务(Local Service):用于应用程序内部;

远程服务(Remote Service):用于android系统内部的应用程序之间;

对于本地服务:

[1]、Activity调用bindService (Intent service, ServiceConnection conn, int flags)方法,得到Service对象的一个引用,这样Activity可以直接调用到Service中的方法,如果要主动通知Activity,我们可以利用回调方法。

[2]、Service向Activity发送消息,可以使用广播,当然Activity要注册相应的接收器。比如Service要向多个Activity发送同样的消息的话,用这种方法就更好。

对于跨进程的服务,通信想到的当然是AIDL。如果是共享数据,还可以用到ContentProvider。


2、介绍锁机制,什么情况下用到锁?

锁分为对象锁和类锁;

1. 类锁:在代码中的方法上加了static和synchronized的锁,或者synchronized(xxx.class)的代码段;如public  static  synchronized  void  increament() ;

2.对象锁:在代码中的方法上加了synchronized的锁,或者synchronized(this)的代码段;

public  synchronized  void  synOnMethod() { ;}

public   void  synInMethod() {

        synchronized(this) {

           ......

        }

}

3.私有锁:在类内部声明一个私有属性如private Object lock,在需要加锁的代码段synchronized( lock)。

重点唠叨:

Java 中每一个对象都有一个锁,当线程访问synchronized 的方法和代码块【对象锁】的时候,会获得这个锁,也可以理解为为这个对象加锁,这个锁在同一时间有且只能被一个线程访问。如果一个线程访问对象锁的时候,锁正在被其他线程访问,那么这个线程就需要等待占用锁的那个线程释放对象锁,陷入阻塞状态。当执行完synchronized方法或者代码块的时候,线程就会释放对象锁。

当线程通过 synchronized 方法或者代码块获得对象锁后,其他线程无法访问对象的任何synchronized方法或者代码块,但是可以访问非synchronized方法或者代码块

如果对静态方法添加synchronized 或者对静态变量的修改添加synchronized 块,那么这个时候获得的是类对象的锁。(class对象)

当线程休眠的时候,是不会释放对象锁。

可以把对象锁理解为资源,线程使用完这个资源后,会释放这个资源,以便其他线程来使用。


3、ContentProvider使用?


4、如何适配UI?

720*1280 , 1920*1080准备2套资源图片,灵活布局+自适应密度单位dp\sp

5、tcp与udp的区别?什么是粘包?如何避免?

游戏服务器:到底使用UDP还是TCP - 文章 - 伯乐在线

你可能感兴趣的:(面试记录2)