Para esta situación, elegiré uno de los dos abordados, singleTask
en manifest.xml O una bandera en los métodos onResume()
& de la Actividad onDestroy()
respectivamente.
Para la primera solución: prefiero usar singleTask
para la actividad en el manifiesto en lugar de singleInstance
, según el uso singleInstance
, descubrí que en algunas ocasiones la actividad crea una nueva instancia separada para sí misma, lo que da como resultado una ventana de dos aplicaciones separadas en las aplicaciones en ejecución en bcakground y además de asignaciones de memoria extra que resultarían en una experiencia de usuario muy mala cuando el usuario abre la vista de aplicaciones para elegir alguna aplicación para reanudar. Entonces, la mejor manera es tener la actividad definida en el manifest.xml como se muestra a continuación:
<activity
android:name=".MainActivity"
android:launchMode="singleTask"</activity>
puedes consultar los modos de inicio de actividad aquí .
Para la segunda solución, solo tiene que definir una variable estática o una variable de preferencia, por ejemplo:
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;
}
}
y desde el otro lado, cuando desee iniciar esta actividad, simplemente marque:
private void launchMainActivity(){
if(MainActivity.isRunning)
return;
Intent intent = new Intent(ThisActivity.this, MainActivity.class);
startActivity(intent);
}