Android-обнаружение перемещения приложения на задний и передний план
Если приложение ушло в фоновый режим и возвращается через 5 минут, мне нужно перезапустить приложение.
Мы можем оставить часть перезапуска, как мы обнаружим, что приложение перемещается в фоновый режим и на передний план? Пожалуйста помочь.
Если есть ссылка на детали ее официальной невозможности или возможности, пожалуйста, поделитесь.
3 ответов:
Когда он переходит на задний план, он делает
onPause(), а когда он возобновляется, он делаетonResume(), см. Жизненный цикл активности.Http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
Переопределение onStop() в каждом действии. Этот метод будет вызываться, когда активность переходит в фоновый режим. Затем обратите внимание на время.
Переопределение onStart () . Это будет называться, когда активность переходит от фона к переднему плану. Тогда обратите внимание на время здесь.
У меня была аналогичная проблема, когда каждый раз, когда приложение возвращалось из фонового фрагмента B, оно пересчитывало результаты на основе вывода фрагмента A в действии (где фрагмент A отправляет данные фрагменту B на основе ввода пользователя). Следующее решение использует простую логическую проверку и должно работать для большинства целей. Это позволило мне сохранить старые результаты FragmentB даже после долгого времени вдали от приложения (предполагая, что результаты в FragmentB не настолько жадны к памяти, что Android очищает их через некоторое время).
//Code from Fragment B public class FragmentB extends Fragment { Boolean app_was_in_background; @Override public void onPause() { super.onPause(); app_was_in_background = true; } @Override public void onResume() { super.onResume(); if (getArguments() != null) { String output_to_FragmentB = getArguments().getString("input_from_FragmentA"); if (app_was_in_background == null || !app_was_in_background) { app_was_in_background = false; PerformMyAlgorithm(output_to_FragmentB); } } } public void PerformMyAlgorithm(String input) { //Code that includes Spinners and calculations, where I want to app //to return to the user's chosen spinner location and display //results as the user saw them before switching to another app //on the device. All this without explicitly "saving" the Spinner //position and data in memory. } }В качестве примечания, применение той же логики к onStart () вместо onResume() может привести к нежелательным результатам:
PerformMyAlgorithm получает вывод фрагмента (т. е. String output_to_FragmentB) снова автоматически в onResume() без пользователь выбирает to so, нажав кнопку в FragmentA (я предполагаю, что это связано с тем, как Android управляет жизненными циклами фрагментов).
Я не хочу этого с тех пор, как вернулся из фон (т. е. onResume) представления и вычисления FragmentB сбрасываются и повторно воспроизводятся / пересчитываются вместо того, чтобы немедленно показывать пользователю результаты перед отправкой приложения в фоновый режим (т. е. метод onPause).
Comments