13

In meiner MainActivity habe ich einen Dialog, der geöffnet wird, wenn ein Flag in der Absicht gesetzt ist. Wenn der Dialog erstellt wurde, ist es in onPause()Aktivitäts-Lebenszyklus geändert mit 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(); 
    } 
} 

Der Dialog geschlossen wird, geöffnet werden, wenn eine Taste des Listview-Halter gedrückt und baut eine Absicht 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))); 
     } 
    }); 

Die AndroidManigfest enthält:

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

Die sdk Versionen sind

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

Auf Android < 7.1.1 funktioniert alles wie erwartet: onNewIntent() wird aufgerufen und der Dialog ist sichtbar.

Aber am 7.1.1. Geräte wird die MainActivity onNewIntent genannt, dann direkt danach und onResume. Dies bedeutet, dass sich die Aktivität selbst öffnet/in den Vordergrund tritt, aber der Dialog wurde sofort geschlossen.

Eine mögliche Problemumgehung ist es, den Dialog in onStop() zu schließen, aber ich verstehe nicht, warum dies auf Android 7.1.1 passiert - wurde etwas im Lebenszyklus geändert?

+0

Können Sie ein einfaches Projekt mit diesem Verhalten bei Github veröffentlichen? – azizbekian

+0

Könnte es sein, dass Ihr Dialog selbst dazu führt, dass Ihre Aktivität angehalten wird? – Nonos

Antwort

2

Aber am 7.1.1. Geräte die onNewIntent der MainActivity aufgerufen wird, dann direkt onPause und onResume. Dies bedeutet, dass sich die Aktivität selbst öffnet/in den Vordergrund tritt, aber der Dialog wurde sofort geschlossen.

Das Android-Framework kann Ihre Aktivität jederzeit im Hintergrund oder Backstack zerstören, und Sie sollten Ihre Aktivitäten schreiben, damit sie sich korrekt verhalten, wenn dies geschieht. sieh dir das an:

Aktiviere keine Aktivitäten im Menü "Entwickleroptionen". Wenn diese Option aktiviert ist, wird das Android-Betriebssystem eine Aktivität zerstören, sobald es gestoppt wird. Es soll Entwicklern helfen, ihre Apps zu debuggen. Für Beispiel kann es den Fall simulieren, dass Android eine Aktivität im Hintergrund aufgrund des Arbeitsspeicherdrucks beendet. Bei normaler Verwendung ist es nicht empfehlenswert, diese Option zu aktivieren, da dies zu unerwarteten Problemen in den Apps führen kann, z. B. beim Einfrieren, beim Schließen und beim Neustart.

Ihr Dialog selbst bewirkt, dass Ihre Aktivität pausiert und dann geschlossen wird.

2

Es scheint, dass differents nicht in der Android-Version sind.

Wenn Sie die Option „Nicht-Aktivitäten halten“ Flag in Entwickler-Einstellungen, dann Lebenszyklus der nächste sein:

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

Da onNewIntent immer in einem pausierten Zustand kommt.

+0

Warum 'onStart()' nicht aufgerufen wird? – azizbekian

Verwandte Themen