恢复表单任务杀手操作或缓存清除

时间:2013-09-26 08:17:35

标签: android task kill-process clear-cache

我希望我的应用从任务杀手操作或缓存清除中恢复。情景如下;

  1. 启动应用
  2. 按主页按钮
  3. 终止所有应用(或清除缓存)
  4. 从最近的任务开始应用
  5. 在这种情况下,应用程序将崩溃。我发现,如果某个应用程序通过任务杀手应用程序或清除缓存而被杀死,则应用程序无法正常杀死。它的一些内存被删除但最后一个状态在最近的任务中保留。因此,当用户尝试从最近的任务中打开应用程序时,应用程序会因丢失一些全局变量或静态变量而崩溃。

    关于这种情况的恼人的事情;在任务杀手操作或缓存清除后,onDestroy()方法不会被调用。 (我的应用程序有一个主要的FragmentActivity,其他片段由这个主要活动控制,所以如果我能检测到我的活动的onDestroy(),我可以正确地杀死它)

    有关如何解决此问题的任何想法?提前谢谢。

2 个答案:

答案 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