Подтвердить что ты не робот

Жизненный цикл активности изменен с помощью API 25 (7.1.1)

В моей MainActivity у меня есть диалог, который открывается, если установлен флаг в намерении. Если диалог был создан, он отклоняется в onPause()

@Override
public void onPause() {
    super.onPause();
    if (_dialog!= null) {
        _dialog.dismiss();
        _dialog= null;
    }
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    if (intentContainsFlag) {
        _dialog = ....;
        _dialog.show();
    }
}

Диалоговое окно должно быть открыто, если нажата кнопка владельца списка ListView и создается URI намерения:

bttn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // The URL scheme is registered in the intent filter
            String intentString = "http://open.example.com/myParameters";
            v.getContext().startActivity(new Intent(Intent.ACTION_VIEW,
                                                    Uri.parse(intentString)));
        }
    });

AndroidManigfest содержит:

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:launchMode="singleTask"
    android:screenOrientation="landscape" >
    <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT"/>
      <category android:name="android.intent.category.BROWSABLE"/>
      <data android:scheme="http" android:host="open.example.com" android:pathPattern=".*"/>
      <data android:scheme="https" android:host="open.example.com" android:pathPattern=".*"/>
    </intent-filter>
....

В версиях sdk установлено значение

minSdkVersion = 19
targetSdkVersion= 22
compileSdkVersion = 23
buildToolsVersion = 23

В Android < 7.1.1, все работает так, как ожидалось: onNewIntent() вызывается и диалог виден.

Но на 7.1.1. Устройства вызывается MainActivity onNewIntent, затем непосредственно после onPause и onResume. Это означает, что активность открывается сама/выходит на передний план, но диалог был немедленно закрыт.

Возможным обходным путем является закрытие диалога в onStop(), но я не понимаю, почему это происходит на Android 7.1.1 - что-то изменилось в жизненном цикле?

4b9b3361

Ответ 1

Но на 7.1.1. вызывается MainActivity onNewIntent, затем непосредственно после этого на Pause и onResume. Это означает, что активность открывается сама/выходит на передний план, но диалог был немедленно закрыт.

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

Не выполняйте действия в меню "Параметры разработчика". Когда это опция включена, ОС Android уничтожит действие, как только он остановлен. Он призван помочь разработчикам отладить свои приложения. Для Например, он может имитировать случай, когда Android убьет действие в фоновом режиме из-за давления памяти. При нормальном использовании это не рекомендуется включить этот параметр, поскольку это может привести к неожиданным проблемы в приложениях, такие как зависания, принудительное закрытие и перезагрузка.

В самом диалоговом окне ваша операция приостанавливается и закрывается.

Ответ 2

Похоже, что в версии для Android нет различий.

Если вы установите флажок "Не сохранять действия" в настройках разработчиков, тогда жизненный цикл будет следующим:

onCreate
onResume
* perform startActivityForResult
onPause
onDestroy
* returning result
onCreate
onResume
onPause
onNewIntent
onResume

Потому что onNewIntent всегда находится в состоянии паузы.