Para esta situação, irei para um dos dois abordados, singleTask
em manifest.xml OU um sinalizador no onResume()
&onDestroy()
métodos respectivamente.
Para a primeira solução: prefiro usar singleTask
para a atividade no manifesto em vez de singleInstance
, conforme o uso singleInstance
, descobri que, em algumas ocasiões, a atividade cria uma nova instância separada para si mesma, o que resulta em ter uma janela de dois aplicativos separados nos aplicativos em execução no bcakground e além de alocações de memória extra que resultariam em uma experiência do usuário muito ruim quando o usuário abre a visualização de aplicativos para escolher algum aplicativo para retomar. Portanto, a melhor maneira é ter a atividade definida no manifest.xml da seguinte forma:
<activity
android:name=".MainActivity"
android:launchMode="singleTask"</activity>
você pode verificar os modos de inicialização da atividade aqui .
Pelo segundo solução, você deve apenas definir uma variável estática ou uma variável de preferência, por exemplo:
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 do outro lado quando você quiser iniciar esta atividade, basta verificar:
private void launchMainActivity(){
if(MainActivity.isRunning)
return;
Intent intent = new Intent(ThisActivity.this, MainActivity.class);
startActivity(intent);
}