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的区别?什么是粘包?如何避免?