In meiner Hauptaktivität habe ich ein Dialogfeld, das geöffnet wird, wenn ein Flag in der Absicht gesetzt ist. Wenn der Dialog erstellt wurde, wird er in verworfenonPause()
@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 soll geöffnet werden, wenn die Schaltfläche eines ListView-Inhabers gedrückt wird und eine Absichts-URI erstellt wird:
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)));
}
});
Das 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 auf eingestellt
minSdkVersion = 19
targetSdkVersion= 22
compileSdkVersion = 23
buildToolsVersion = 23
Unter Android <7.1.1 funktioniert alles wie erwartet: onNewIntent()
wird aufgerufen und der Dialog ist sichtbar.
Aber am 7.1.1. Geräte, auf denen die MainActivity onNewIntent
aufgerufen wird, dann direkt danach onPause
und onResume
. Dies bedeutet, dass sich die Aktivität selbst öffnet / in den Vordergrund tritt, der Dialog jedoch sofort geschlossen wurde.
Eine mögliche Problemumgehung besteht darin, den Dialog zu schließen, onStop()
aber ich verstehe nicht, warum dies unter Android 7.1.1 geschieht. Wurde im Lebenszyklus etwas geändert ?
Aber am 7.1.1. Geräte, bei denen der onNewIntent der MainActivity aufgerufen wird, dann direkt danach onPause und onResume. Dies bedeutet, dass sich die Aktivität von selbst öffnet / in den Vordergrund tritt, der Dialog jedoch sofort geschlossen wurde.
Das Android-Framework kann Ihre Aktivitäten jedes Mal zerstören, wenn sie sich im Hintergrund oder im Backstack befinden. Sie sollten Ihre Aktivitäten so schreiben, dass sie sich in diesem Fall korrekt verhalten. Schau dir das an :
Behalten Sie keine Aktivitäten im Menü "Entwickleroptionen" bei. Wenn diese Option aktiviert ist, zerstört das Android-Betriebssystem eine Aktivität, sobald sie gestoppt wird. Es soll Entwicklern beim Debuggen ihrer Apps helfen. Beispielsweise kann der Fall simuliert werden, dass Android eine Aktivität im Hintergrund aufgrund von Speicherdruck beendet. Bei normaler Verwendung wird nicht empfohlen, diese Option zu aktivieren, da dies zu unerwarteten Problemen in den Apps führen kann, z. B. Einfrieren, erzwungenes Schließen und Neustarten.
Ihr Dialog selbst bewirkt, dass Ihre Aktivität angehalten und dann geschlossen wird.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen