Android内存与ANR问题

255 阅读1分钟

I:内存泄露常见问题

a.长生命周期对象持有短生命周期对象

1.单例类长期持有短期Activity,View等对象导致泄露

2.内部非静态类持有外部类引用,导致外部类泄露

3.注册的Listener类用完没有返注册导致泄露

4.Cursor,File流等未关闭

5.Thread,Handler等“延后”执行的方法,导致引用类延迟释放。(不一定会泄露)

II:ANR常见问题

a.主线程耗时操作

1.主线程执行“不那么耗时”方法积少成多

2.频繁调用系统同步方法导致等待。比如getSystemService导致在BinderProxy.transactNative发生ANR。

3.synchronized方法导致等待锁。

  b.创建大量子线程或者不合适的线程池使用。