BATJ30道经典常见Android 高级面试题及答案( 五 )

III. observer 我们在使用监听器的时候 , 往往是addxxxlistener , 但是当我们不需要的时候 , 忘记removexxxlistener , 就容易内存leak 。

广播没有unregisterrecevier

IV.各种数据链接没有关闭 , 数据库contentprovider , io , sokect等 。 cursor

V.内部类:

java中的内部类(匿名内部类) , 会持有宿主类的强引用this 。

所以如果是new Thread这种 , 后台线程的操作 , 当线程没有执行结束时 , activity不会被回收 。

Context的引用 , 当TextView 等等都会持有上下文的引用 。 如果有static drawable , 就会导致该内存无法释放 。

VI.单例

单例 是一个全局的静态对象 , 当持有某个复制的类A是 , A无法被释放 , 内存leak 。

回到顶部

3.如何避免 OOM 异常

推荐阅读