Obter a activity atual e a classe de activity base
Criar uma classe base Java chamada BaseActivity para herdar dela
android.support.v7.app.AppCompatActivity
Depois sobrescrevemos o método onCreate nessa classe base
Adicionamos uma linha de log dentro dele
Log.d(“Activity atual”,getClass().getSimpleName());
Com isso, não importa qual activity abrimos, conseguimos saber qual está ativa
package com.foxdevelop.www.lifedemo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("Activity atual",getClass().getSimpleName());
}
}Code language: JavaScript (javascript)
05-13 08:36:47.473 18499-18499/? D/Activity atual: MainActivity
05-13 08:36:56.460 18499-18499/com.foxdevelop.www.lifedemo D/Activity atual: NormalActivity
05-13 08:37:03.839 18499-18499/com.foxdevelop.www.lifedemo D/Activity atual: Activity3
05-13 08:38:11.104 18499-18499/com.foxdevelop.www.lifedemo D/Activity atual: NormalActivity
Sair do app com um clique
Se estivermos na terceira activity e quisermos fechar o app, precisamos apertar o botão voltar três vezes, o que é pouco prático
Apertar o botão home não fecha o aplicativo, apenas o suspende.
Então como fazemos para sair do app com um único clique?
Podemos criar uma classe de coleção dedicada para gerenciar todas as activities.
Adicionamos um gerenciador de activities para cuidar disso
Essa é uma classe de coleção com uma lista que guarda todas as activities. Ela tem os métodos add e remove para incluir ou remover activities da lista
Na activity base, chamamos add no onCreate e remove no onDestroy
Assim garantimos que a lista só contenha activities que estão na pilha
A lista guarda referências de cada activity, então chamar finish funciona diretamente em cada instância.
Depois adicionamos o método finishAll na classe de coleção
Nesse método usamos um laço foreach e chamamos o método finish de cada activity
Vamos testar abaixo
Na terceira activity, registramos o evento de clique do botão e chamamos essa classe de coleção.
Empacotamos o finishAll como método estático.
Para garantir o encerramento completo, podemos usar o método killProcess do sistema para matar o processo do app.
android.os.Process.KillProcess(android.os.Process.myPid());
Classe gerenciadora de activities
package com.foxdevelop.www.lifedemo;
import android.app.Activity;
import java.security.PublicKey;
import java.util.ArrayList;
import java.util.List;
public class ActivityHelper {
public static List<Activity> activities = new ArrayList<Activity>();
public static void add (Activity a)
{
activities.add(a);
}
public static void remove (Activity a)
{
activities.remove(a);
}
public static void finishAll()
{
for (Activity a:activities)
{
a.finish();
}
}
}Code language: JavaScript (javascript)
Adicionar e remover activities na activity base
Adicionar activity na criação: onCreate
Remover activity na destruição: onDestroy
package com.foxdevelop.www.lifedemo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("Activity atual",getClass().getSimpleName());
ActivityHelper.add(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityHelper.remove(this);
}
}Code language: JavaScript (javascript)
Adicionar botão na Activity3 para chamar finishAll
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Terceira activity" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Sair do app" />
</LinearLayout>Code language: HTML, XML (xml)
public class Activity3 extends BaseActivity {
private static final String TAG = "Terceira activity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_3);
Log.e(TAG, "" + getTaskId());
Button b = (Button)findViewById(R.id.button);
b.setOnClickListener(
new View.OnClickListener(){
@Override
public void onClick(View view){
ActivityHelper.finishAll();
}
}
);
}
}Code language: PHP (php)
Operações com activities