Per questa situazione, sceglierò uno dei due avvicinati, singleTask
in manifest.xml OPPURE un flag in Activity onResume()
&onDestroy()
rispettivamente nei metodi .
Per la prima soluzione: preferisco utilizzare singleTask
per l'attività nel manifest piuttosto che singleInstance
, come da utilizzo, singleInstance
ho capito che in alcune occasioni l'attività crea una nuova istanza separata per se stessa che risulta avere una finestra di due applicazioni separate nelle app in esecuzione in bcakground e oltre ad allocazioni di memoria extra che risulterebbero una pessima esperienza utente quando l'utente apre la vista app per scegliere alcune app da riprendere. Quindi, il modo migliore è definire l'attività nel manifest.xml come segue:
<activity
android:name=".MainActivity"
android:launchMode="singleTask"</activity>
puoi controllare le modalità di avvio delle attività qui .
Per la seconda soluzione, devi solo definire una variabile statica o una variabile di preferenza, ad esempio:
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;
}
}
e dall'altro lato quando vuoi avviare questa attività, controlla:
private void launchMainActivity(){
if(MainActivity.isRunning)
return;
Intent intent = new Intent(ThisActivity.this, MainActivity.class);
startActivity(intent);
}