我希望我的应用从任务杀手操作或缓存清除中恢复。情景如下;
在这种情况下,应用程序将崩溃。我发现,如果某个应用程序通过任务杀手应用程序或清除缓存而被杀死,则应用程序无法正常杀死。它的一些内存被删除但最后一个状态在最近的任务中保留。因此,当用户尝试从最近的任务中打开应用程序时,应用程序会因丢失一些全局变量或静态变量而崩溃。
关于这种情况的恼人的事情;在任务杀手操作或缓存清除后,onDestroy()方法不会被调用。 (我的应用程序有一个主要的FragmentActivity,其他片段由这个主要活动控制,所以如果我能检测到我的活动的onDestroy(),我可以正确地杀死它)
有关如何解决此问题的任何想法?提前谢谢。
答案 0 :(得分:1)
我通过使用生命周期差异来解决这个问题。
如果调用主页按钮onStop(),但如果app关闭,则onStop()和onDestroy()都会被调用,这意味着如果在后台onDestroy()中没有调用任务被杀死。我通过sharedPreferences跟踪这个场景。
@Override
protected void onStop() {
SharedPreferencesUtilities.putBoolean("isFromOnStop", true);
super.onStop();
}
@Override
protected void onDestroy() {
SharedPreferencesUtilities.putBoolean("isFromOnStop", false);
super.onDestroy();
android.os.Process.killProcess(android.os.Process.myPid());
}
然后在onCreate()中我检查了这个sharedPreferences boolean;
if(SharedPreferencesUtilities.getBoolean("isFromOnStop", false)) {
SharedPreferencesUtilities.putBoolean("isFromOnStop", false);
((MainFragmentActivity)mContext).finish();
Toast.makeText(mContext, "Ooops app was killed in background", Toast.LENGTH_SHORT).show();
}
答案 1 :(得分:-1)
问题是任务杀手的存在:它们没用,恕我直言。有关详细信息,请参阅this page。