Pour cette situation, je vais opter pour l'un des deux approchés, singleTask
dans manifest.xml OU un drapeau dans le onResume()
&onDestroy()
méthodes méthodes respectivement.
Pour la première solution: je préfère utiliser singleTask
pour l'activité dans le manifeste plutôt que singleInstance
, selon l'utilisation, singleInstance
j'ai compris que dans certaines occasions, l'activité créant une nouvelle instance distincte pour elle-même, ce qui entraîne une fenêtre d'applications distinctes dans les applications en cours d'exécution dans bcakground et en plus des allocations de mémoire supplémentaires qui entraîneraient une très mauvaise expérience utilisateur lorsque l'utilisateur ouvre la vue des applications pour choisir une application à reprendre. Donc, le meilleur moyen est d'avoir l'activité définie dans le manifest.xml comme suit:
<activity
android:name=".MainActivity"
android:launchMode="singleTask"</activity>
vous pouvez vérifier les modes de lancement d'activité ici .
Pour la deuxième solution, il suffit de définir une variable statique ou une variable de préférence, par exemple:
public class MainActivity extends Activity{
public static boolean isRunning = false;
@Override
public void onResume() {
super.onResume();
// now the activity is running
isRunning = true;
}
@Override
public void onDestroy() {
super.onDestroy();
// now the activity will be available again
isRunning = false;
}
}
et de l'autre côté lorsque vous souhaitez lancer cette activité, il suffit de cocher:
private void launchMainActivity(){
if(MainActivity.isRunning)
return;
Intent intent = new Intent(ThisActivity.this, MainActivity.class);
startActivity(intent);
}