2013-09-26 2 views
2

Я хочу, чтобы мое приложение восстанавливалось после действий или уничтожения кеша задачи. Сценарий ниже;Восстановить действие задачи уничтожения задачи или очистить кэш

  1. запуск приложения
  2. нажмите кнопку домой
  3. убить все приложения (или очистить кэш)
  4. запуска приложений из недавней задачи

После этого сценария приложение будет крах. Я заметил, что если приложение было убито с помощью приложений-убийц задач или путем очистки кеша, приложение не будет правильно убито. Часть его памяти удаляется, но последнее состояние сохраняется в последних задачах. Поэтому, когда пользователь пытается открыть приложение из последних задач, приложение падает из-за потери некоторых глобальных или статических переменных.

Раздражающая вещь об этой ситуации; Метод onDestroy() не вызван после действия kill-убийцы или очистки кеша. (у моего приложения есть одна основная функция FragmentActivity, и другие фрагменты контролируются этим основным действием, поэтому, если я могу обнаружить onDestroy() в своей деятельности, я могу убить ее должным образом)

Любые идеи о том, как решить эту проблему? Заранее спасибо.

ответ

1

Я решаю эти проблемы, используя различия в жизненном цикле.

Если вызывается домашняя кнопка, на которую нажимается кнопкаStop(), но если приложение закрыто, то вызываются как 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

Проблема заключается в существовании убийцы задач: они бесполезны, ИМХО. См. this page для получения дополнительной информации.

+0

Независимо от того, что вы считаете убийцами задач, в состоянии приложения все еще остается проблема, когда она возобновляется после убийства убийцей задачи. – rajath

+0

@rajath, и это причина нисходящего? Если вы убьете приложение, что вы ожидаете? Если он был убит системой Android, проблема все еще существует? – JJ86

Смежные вопросы