前言
内存泄露是一件很危险的事情,一旦内存引用的是activity的某个对象,在activity毁灭的时候,对象没办法回收,而是一直被引用,将会无法回收,导致内存一直被占用,直至内存被消耗殆尽。
常见的一些内存泄露
1. public abstract Object getSystemService(@ServiceName @NonNull String name),这个主要会泄露在引用activity的context,所以最好用getApplicationContext()全局的context
2. 常见的Toast.makeText(GlobalContext.globalContext, text, Toast.LENGTH_SHORT),这个toast里面的context是activity的话,那就会内存泄漏了,所以换成getApplicationContext()全局的context。
3. 例如环信的ArrayList chatRoomChangeListeners = new ArrayList();这个监听器list,用来监听聊天室的,如果你一开始addlistener的话,但是销毁activity的时候,没有去remove这个list的监听集合的话,会内存泄露
4. layoutinflater.from 内存泄露,这个要尽量不要用static去修饰
5. 百度地图,我见过的最可怕的内存泄露
6. 推荐大家使用com.squareup.leakcanary:leakcanary-android:1.4-beta2这个leaks测试内存