场景回放
今天在开发项目中,本来想在用户退出应用程序后(按两次返回退出)利用SharePreferences在onDestory中保
存某些数据。结果发现在Activity的onCreate中总不能获取到上次保存的数据。最开始以为是SharePreferences未调用
正确,结果不是。接着发现一个比较坑的事情,Activity的所有生命周期方法都执行了,但是onDestory方法没有执
行,这也导致数据没有保存成功。
分析
onDestory方法怎么会无缘无故没有执行呢!?这里只能分析我们项目中的代码了。在两次返回退出的逻辑中有这也一段代码。
ActivityManagerTool.getActivityManager().exit();
/**
* 关闭所有的activity
*/
public void exit() {
for (Activity activity : activities) {
if (activity != null) {
activity.finish();
}
}
System.exit(0);
}
当所有activity都finish后,就强制杀死整个进程......,这玩的有点大了。
到这里就猜想,由于整个进程被强制杀死导致onDestory方法还没来得及执行。接着我将
System.exit(0);
也不知道这代码是哪个帅哥美女写的,这坑挖的相当给力啊。
最后正确做法应是将System.exit(0)放在onDestory方法中最后执行,这样才能保证Activity中onDestory方法被调用。