2

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

  1. 启动应用
  2. 按主页按钮
  3. 杀死所有应用程序(或清除缓存)
  4. 从最近的任务启动应用程序

在这种情况下,应用程序将崩溃。我观察到,如果一个应用程序通过任务杀手应用程序或清除缓存被杀死,应用程序不会被正确地杀死。它的一些内存被删除,但最后一个状态保留在最近的任务中。因此,当用户尝试从最近的任务中打开应用程序时,应用程序会由于丢失一些全局或静态变量而崩溃。

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

关于如何解决这个问题的任何想法?提前致谢。

4

2 回答 2

1

我通过使用生命周期差异来解决这个问题。

如果触摸主页按钮 onStop() 被调用,但如果应用程序关闭,则 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();
}
于 2013-10-01T08:20:32.830 回答
-1

问题是任务杀手的存在:它们没用,恕我直言。有关更多信息,请参阅此页面

于 2013-09-26T08:25:16.863 回答