Operações com activities

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

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *