13

W głównym oknie dialogowym Mam okno dialogowe, które jest otwarte, jeśli ustawiono flagę w intencji. Jeżeli okno zostało stworzone, jest ona oddalona w onPause()Cykl życia działalności zmieniony za pomocą API 25 (7.1.1)

@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(); 
    } 
} 

oknie dialogowym ma być otwarty czy przycisk posiadacz ListView jest wciśnięty i buduje intencją 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 zawiera:

<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> 
.... 

wersji SDK są ustawione na

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

Na Androidzie < 7.1.1, wszystko działa zgodnie z oczekiwaniami: wywoływana jest onNewIntent(), a okno dialogowe jest widoczne.

Ale w 7.1.1. Urządzenia nazywa się MainActivity onNewIntent, następnie bezpośrednio po i onResume. Oznacza to, że działanie otwiera się/wychodzi na pierwszy plan, ale okno dialogowe zostało natychmiast zamknięte.

Możliwym rozwiązaniem jest zamknięcie okna dialogowego w onStop(), ale nie rozumiem, dlaczego tak się dzieje w systemie Android 7.1.1 - coś się zmieniło w cyklu życia?

+0

Czy możesz wysłać prosty projekt z tym zachowaniem na github? – azizbekian

+0

Czy to możliwe, że samo okno dialogowe powoduje wstrzymanie działania? – Nonos

Odpowiedz

2

Ale w 7.1.1. Urządzenia są wywoływane przez funkcję MainActivity onNewIntent, a następnie bezpośrednio onPause i onResume. Oznacza to, że działanie otwiera się/wychodzi na pierwszy plan, ale okno dialogowe zostało natychmiast zamknięte.

System operacyjny Android może zniszczyć Twoją aktywność za każdym razem, gdy znajduje się w tle lub w backstacku, i powinieneś napisać swoje działania, aby zachowywały się poprawnie, gdy tak się stanie. spójrz na to:

Nie wykonuj czynności w menu Opcje programisty. Po włączeniu tej opcji system operacyjny Android zniszczy działanie, gdy tylko zostanie zatrzymane. Ma to pomóc deweloperom w debugowaniu ich aplikacji. W przypadku przykładu może symulować przypadek, w którym Android zabije działanie w tle ze względu na presję pamięci. Przy normalnym użytkowaniu nie zaleca się włączania tej opcji, ponieważ może to prowadzić do nieoczekiwanych problemów z aplikacjami, takich jak zawieszenie, wymuszanie zamykania i ponowne uruchamianie.

Samo okno dialogowe powoduje wstrzymanie działania i zamknięcie.

2

Wygląda na to, że różne wersje nie występują w wersji na Androida.

Jeśli zaznaczysz „Nie zachowuj działań” flagę w ustawieniach deweloperów, a następnie cyklu będzie następny:

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

Ponieważ onNewIntent zawsze jest w stanie wstrzymania.

+0

Dlaczego funkcja 'onStart()' nie jest wywoływana? – azizbekian