Ich habe eine Anwendung, die mit einem SplashScreenActivity
beginnt. Danach wird eine LoginActivity
angezeigt, oder wenn der Benutzer bereits angemeldet ist, wird MainActivity
angezeigt. Wenn die Anwendung bereits ausgeführt wird, SplashScreenActivity
mit folgendenAndroid: BackStack funktioniert fehl, wenn Anwendung von einer anderen App gestartet wurde
//SplashScreenActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Adding this check for following cases
if (!isTaskRoot())
{
String intentAction = getIntent().getAction();
if (getIntent().hasCategory(Intent.CATEGORY_LAUNCHER) && intentAction != null && intentAction.equals(Intent.ACTION_MAIN)) {
finish();
return;
}
if(getIntent().getCategories().contains(GCMIntentService.INTENT_CATEGORY_GH_NOTIFICATION)){
finish();
return;
}
}
Problem des Feldes verwiesen tritt
Wenn ich die Anwendung von einer anderen Aktivität wie Plays beginnen, nimmt es an der richtigen Aktivität, wenn bereits ausgeführt. Dies ist die Intent
ich innerhalb einer Sekunde App
//AnotherApplication.apk
Intent launchIntent = getPackageManager().getLaunchIntentForPackage("my.package.name");
startActivity(launchIntent);
jedoch diese Aktion irgendwie bricht die Backstack zu reproduzieren bin mit. Anstatt die Anwendung auf Backpress in MainActivity
zu schließen, startet es die Anwendung neu.
//MainActivity.class
@Override
public void onBackPressed() {
if (getNavDrawerMain().isDrawerOpen()) {
getNavDrawerMain().closeDrawer();
} else {
closeApp();
}
}
protected void closeApp() {
if (doubleBackToExitPressedOnce) {
//super.onBackPressed(); //i tried both, but behaviour is the same
finish();
return;
}
this.doubleBackToExitPressedOnce = true;
new Handler().postDelayed(new Runnable() {
@Override
public void run()
doubleBackToExitPressedOnce = false;
}
}, 500);
}
Ich benutzte Haltepunkte und fand heraus, dass MainActivity: onDestroy() aufgerufen werden, sondern Anwendung auf den Homescreen wieder aufzunehmen, ist es immer neu gestartet, und ich weiß nicht, warum.
Ich habe folgendes versucht: - Benutzte verschiedene Launchmodes wie singleTask
und singleInstance
, aber es machte keinen Unterschied. onNewIntent
genannt wird, aber wenn ich finish
nennen, HomeActivity
startet - wie unten commeted, habe ich versucht, moveTaskToBack(true)
, aber Aktivität ist restaring auch (und wir wollen wirklich die App statt Bewegen des Knopfes nach Backstack schließen)
Meiner Erfahrung nach gibt 'getLaunchIntentForPackage (...)' * keine Launcher-Absicht zurück. Ein Launcher Intent wird den bestehenden Task auslösen, aber die Intents, die von 'getLaunchIntentForPackage (...)' zurückgegeben werden, werden tatsächlich einen neuen starten. Ihre App wird möglicherweise nicht neu gestartet, wenn Sie die App verlassen. Sie sehen vielleicht nur eine weitere Kopie davon. –
@KevinKrumwiede: Intent hat folgende Art 'android.intent.action.MAIN', ich habe gerade etwas zusätzlichen Code hinzugefügt, wie ich die Absicht handle – longilong
Ich kann nichts finden, was explizit so sagt, aber ich vermute, dass nur das System ist darf "ACTION_MAIN" erhalten. –