J'ai lu plusieurs articles sur l'utilisation de ce système, mais il doit me manquer quelque chose car il ne fonctionne pas pour moi. Mon activité A a launchmode="singleTop" dans le manifeste. Elle lance l'activité B, avec launchmode="singleInstance". L'activité B ouvre un navigateur et reçoit une intention en retour, c'est pourquoi elle est en mode singleInstance. J'essaie de remplacer le bouton de retour pour que l'utilisateur soit renvoyé à l'activité A, et puisse ensuite appuyer sur Retour pour quitter l'activité, plutôt que de revenir à l'activité B.
// activity B
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) onBackPressed();
return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
startActivity(new Intent(this, UI.class)
.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK));
return;
}
Après le retour du navigateur, la pile est... A,B,Navigateur,B
Je m'attends à ce que ce code change la pile en... A ... de sorte que le fait d'appuyer une nouvelle fois sur la touche retour ramène l'utilisateur à l'écran d'accueil.
Au lieu de cela, il semble changer la pile en... A,B,Navigateur,B,A ...comme si ces drapeaux n'étaient pas là.
J'ai essayé d'appeler finish() dans l'activité B après startActivity, mais le bouton retour me ramène à nouveau au navigateur !
Qu'est-ce que je rate ?