引子
先来温习一下activity的生命周期
onCreate() >> onStart() >> onResume() >> onPause() >> onStop() >> onDestory()
清理资源的思路一般是在页面不在前台,即onPause() >> onStop() >> onDestory()几个方法中进行处理。通常做法是在onDestory()进行资源的释放,比如反注册、移除监听,变量置空等,比较简单的页面此逻辑不会有问题。
那有点复杂的呢?
页面添加了监听,退出的时候还没走到onDestory()此时收到了监听执行了相应的逻辑,清理资源已是不及时。
更加复杂
若activity页面是跳转而不是关闭
A:onPause() >> B:onCreate() >> B:onStart() >> B:onResume() >> A:onStop() ,此时虽然走了onPause()和onStop()方法,但页面并不是销毁。
继续复杂
若activity的启动模式是singleTask呢,此时不会走isFinishing(),页面跳转,在出入栈的时候已经调用了onPause()和onStop(),但因为栈中单例模式此时activity会直接走onDestory(),完美避开前面的资源清理。
几种处理方法
onDestory()清理资源
此方法试用于业务逻辑简单,无需及时释放资源的场景
@Override
protected void onDestroy() {
super.onDestroy<