一.为什么不在onDestory中执行释放资源操作?
这里我们先大概回顾下Activity的生命周期:
oncreate()->onstart()->onResume()->onRestart()->onPouse()->onStop()->onDestory()
可以看到Activity生命周期的最后一个执行方法就是onDestory,因此不少时候我们需要在页面结束时释放资源的操作都在onDestory
方法中,正常情况下这样并不会有什么问题,但是有些情况onDestroy的执行时间可能较晚,所以并不适合在onDestroy中执行释放资源操作。
二.解决办法:
因此我们释放资源的操作可以根据需求在onPouse或onStop中判断isFinishing()来执行释放资源操作:
private boolean isDestory = false;
private void destory(){
if (!isDestory){
//释放资源
isDestory = true;
}
}
@Override
protected void onStop() {
super.onStop();
if (isFinishing()){
destory();//释放资源
}
}
@Override
protected void onDestroy() {
super.onDestroy();
destory();//释放资源,在onDestroy检测释放回收
}
}