【KO】Android 面试高频词
15个问题的逐一解答:
1. 跨进程通信的几种方式
常见的跨进程通信(IPC)方式包括:
- Intent传递数据:通过
Intent
在组件间传递数据(如Activity
跳转),适用于简单数据传递(受限于Binder
传输大小)。 - AIDL(Android Interface Definition Language):定义跨进程接口,支持复杂数据和方法调用,底层基于
Binder
。 - Messenger:基于
Handler
和Binder
,简化了AIDL的使用,适合低频率通信,支持单向或双向消息传递。 - ContentProvider:用于数据共享(如通讯录),封装了数据操作,通过
Uri
暴露接口,底层基于Binder
。 - Socket:基于TCP/UDP的网络通信,适用于跨设备或进程间的长连接通信(如客户端-服务器模型)。
- 文件共享:通过读写同一文件实现通信,适用于非实时、低频率场景(需处理并发问题)。
2. wait和sleep的区别
- 所属类不同:
wait()
是Object
类的方法;sleep()
是Thread
类的静态方法。 - 锁机制不同:
wait()
会释放当前对象的锁,需在synchronized
同步块中调用;sleep()
不会释放锁,可在任意位置调用。 - 唤醒方式不同:
wait()
需通过notify()
/notifyAll()
唤醒,或等待超时自动唤醒;sleep()
到指定时间后自动唤醒。 - 用途不同:
wait()
用于线程间协作(如生产者-消费者模型);sleep()
用于暂停线程执行一段时间。
3. String、StringBuffer、StringBuilder的区别
- 可变性:
String
是不可变的(底层char数组被final
修饰),每次修改都会创建新对象;StringBuffer
和StringBuilder
是可变的,修改时直接操作内部数组。 - 线程安全:
StringBuffer
的方法加了synchronized
锁,线程安全;StringBuilder
无锁,线程不安全。 - 性能:
String
修改性能最差(频繁创建对象);StringBuilder
性能优于St