未取消注册或回调导致内存泄露
比如我们在 Activity 中注册广播,如果在 Activity 销毁后不取消注册,那么这个刚播会一直存在
系统中,同上面所说的非静态内部类一样持有 Activity 引用,导致内存泄露。因此注册广播后在
Activity 销毁后一定要取消注册。
public class MainActivity extends AppCompatActivity { @Override protected void
onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); this.registerReceiver(mReceiver, new
IntentFilter()); } private BroadcastReceiver mReceiver = new
BroadcastReceiver() { @Override public void onReceive(Context context, Intent
intent) { // 接收到广播需要做的逻辑 } }; @Override protected void onDestroy() {
super.onDestroy(); this.unregisterReceiver(mReceiver); } }
在注册观察则模式的时候,如果不及时取消也会造成内存泄露。比如使用 Retrofit+RxJava 注册网
络请求的观察者回调,同样作为匿名内部类持有外部引用,所以需要记得在不用或者销毁的时候
取消注册。