Android 开发中常见的注意点
总结一下Android开发中常见的注意点。
资源
- 不允许出现 Receiver/AppOps/Cursor/Observer 资源泄露
- 使用 HandlerThread 要注意退出,否则导致 Thread 和 FD 泄露
- 不允许出现 global/local references 的 leak 问题
- 不要多线程调用通过 Binder 返回内容很大的系统接口
- 不要通过 Binder 传递超过 100K 以上的数据
- 尽量少注册高频回调监听器
ANR
- 耗时操作不要在 UI Thread 执行,防止 ANR 问题发生
- 应用进程间通信不要使用 broadcast 机制,避免 ANR
- 不要在 BroadcastReceiver 中 onReceive 函数启动 Thread 进行异步操作
- 不要在 onCreate 主线程启动的时候使用 Provider 数据库
- 尽量不要使用静态广播方式接收系统频繁发送的广播
Crash
- 针对无法保证部位 Null 的变量要进行非空判断
- 非 UI 线程不允许进行 UI 更新
- 不允许通过捕获 RuntimeException 类异常规避问题
- App 不要使用 setDefaultUncaughtExceptionHandler 方法注册私有异常处理函数
- 非 Thread Safe 的 list 并发场景下,遍历引发异常
- Parcel.marshal 不允许含有 binder object
- parcel.recycle 不允许重复调用多次
并发
- 正确使用对象的 wait / notify 同步函数,避免出现死锁等问题
- 不能使用 double check lock pattern
- Android 应用进程禁止通过 Fork 创建子线程
- System_Server 进程中尽量不要启动新的 Thread
- System_Server 进程中所有 UI 操作要在 UI Thread 上完成