Приложение перезапускает основную активность из фона вместо возобновления предыдущего состояния - PullRequest
0 голосов
/ 06 марта 2020

Если я запускаю приложение с домашнего экрана (нажав значок приложения), то я перемещаюсь по приложению и затем покидаю приложение, когда я снова открываю приложение таким же образом (нажав значок приложения из дома экран) он вернется в предыдущее состояние и покажет последнее действие, перед которым я был, прежде чем покинуть приложение. Эта часть работает как ожидалось.

Вот проблема:

Если я сначала запускаю приложение из магазина воспроизведения или вручную из установщика apk, а затем снова открываю приложение другим способом (нажав значок приложения из дома например, на экране), приложение запустит новый экземпляр основного действия и добавит его в предыдущий стек навигации (если я нажму кнопку «Назад», то go вернется к последнему действию, которое я выполнял перед выходом из приложения).

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

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (!isTaskRoot()
        && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
        && getIntent().getAction() != null
        && getIntent().getAction().equals(Intent.ACTION_MAIN)) {

        finish();
        return;
    }
    [...]
}

, но вызов fini sh () вылетает из приложения.

1 Ответ

0 голосов
/ 07 марта 2020

Я действительно выяснил, почему finish() вывел приложение из строя: был вызван onDestroy(), и он попытался отменить регистрацию получателя, который еще не был зарегистрирован, поэтому приложение упало: Unable to destroy activity [...] Receiver not registered.

Так что код на самом деле отлично работает для моей проблемы:

if (!isTaskRoot()
        && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
        && getIntent().getAction() != null
        && getIntent().getAction().equals(Intent.ACTION_MAIN)) {

    finish();
    return;
}

Я просто не обратил внимание на onDestroy()

...