Android-обнаружение перемещения приложения на задний и передний план



Если приложение ушло в фоновый режим и возвращается через 5 минут, мне нужно перезапустить приложение.
Мы можем оставить часть перезапуска, как мы обнаружим, что приложение перемещается в фоновый режим и на передний план? Пожалуйста помочь.



Если есть ссылка на детали ее официальной невозможности или возможности, пожалуйста, поделитесь.

361   3  

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

    Ничего не найдено.