2013-09-26 20 views
2

我想让我的应用从任务杀手行动或缓存清除中恢复。情景如下;恢复表单任务杀手行动或缓存清除

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

此方案后,应用程序会崩溃。我观察到,如果应用程序通过任务杀手应用程序死亡或清除缓存,应用程序无法正常死亡。其中一些内存被删除,但最近的任务中保留了最后一个状态。所以当用户试图从最近的任务中打开应用程序时,应用程序崩溃是由于丢失了一些全局或静态变量。

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

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

回答

1

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

如果触摸了home按钮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布尔;

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

问题是任务杀手的存在:他们没用,恕我直言。有关更多信息,请参见this page

+0

无论你对任务杀手的看法是什么,在应用程序处于被任务杀手杀死后恢复的状态中仍然存在问题。 – rajath

+0

@rajath,这是downvote的原因?如果你杀了一个应用程序,你期望什么?如果它被Android系统杀死,问题仍然存在? – JJ86