一.context被长期持有,常见于单例模式
解决办法:1.用 applicationContext 取代 activity 2.activity onDestroy 的时候置空 context
二.cursor,IO,bitmap,网络 各种流忘记关闭
三.注册监听器忘记解除注册
四.android sdk 自身 bug
五.handler
解决办法:1.activity onDestroy 的时候清除所有的 msg 或 runnable 2.handler 写成外部类(或静态内部类)同时弱引用 activity 3.在 workThread 中使用 handler
六.内部类或匿名内部类长期持有外部类引用
解决办法:尽量避免使用非静态的匿名内部类或内部类,或者用弱引用持有外部对象
七.最好将变量作用域设置为最小
八.记得在程序退出前将集合里的对象 clear
九.谨慎使用 static 关键字,尤其对于 context 与 bitmap
十.webview
当我们不要使用WebView对象时,应该调用它的destory()函数来销毁它
十一.广播泄露:手动注册广播时,记住退出的时候要unregisterReceiver()
十二,activity 的匿名内部类线程持有外部 activity(配置改变引起的尤为严重,activity 持有的 view 及其相关的资源文件都不会被回收,损失惨重)
十三,僵尸线程
考虑是否真的需要使用线程。用 loader 执行短暂的后台异步操作、用 service做耗时操作
十四,建议在 fragment 中完成耗时操作(Handling Configuration Changes with Fragments)