Operationen mit Activities

Aktuelle Activity und Basis-Activity-Klasse abrufen

Eine Java-Basisklasse namens BaseActivity erstellen und davon erben

android.support.v7.app.AppCompatActivity

Dann überschreiben wir die onCreate-Methode innerhalb dieser Basisklasse

Anschließend fügen wir einen Log-Eintrag hinzu

Log.d(„Aktuelle Activity“,getClass().getSimpleName());

So erkennen wir immer, welche Activity gerade geöffnet ist, egal zu welcher wir wechseln

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("Aktuelle Activity",getClass().getSimpleName());
    }
}Code-Sprache: JavaScript (javascript)
05-13 08:36:47.473 18499-18499/? D/Aktuelle Activity: MainActivity
05-13 08:36:56.460 18499-18499/com.foxdevelop.www.lifedemo D/Aktuelle Activity: NormalActivity
05-13 08:37:03.839 18499-18499/com.foxdevelop.www.lifedemo D/Aktuelle Activity: Activity3
05-13 08:38:11.104 18499-18499/com.foxdevelop.www.lifedemo D/Aktuelle Activity: NormalActivity

App mit einem Klick beenden

Wenn wir uns in der dritten Activity befinden, müssen wir dreimal die Zurück-Taste drücken, um die App zu schließen. Das ist umständlich

Ein Druck auf die Home-Taste beendet die App nicht, sondern setzt sie nur aus.

Wie können wir also die App mit nur einem Klick beenden?

Wir erstellen eine spezielle Sammlungsklasse, die alle Activities verwaltet.

Wir fügen einen Activity-Manager hinzu, der diese Aufgabe übernimmt

Diese Sammlungsklasse enthält eine Liste zum Speichern aller Activities. Mit den Methoden add und remove fügen wir Activities zur Liste hinzu oder entfernen sie

In der Basis-Activity rufen wir add innerhalb von onCreate auf und remove in onDestroy

So stellen wir sicher, dass die Liste nur die Activities enthält, die sich im Stack befinden

Da die Liste Referenzen auf jede Activity speichert, ruft ein Aufruf von finish diese direkt für die jeweilige Instanz auf.

Anschließend fügen wir der Sammlungsklasse die Methode finishAll hinzu

In dieser Methode verwenden wir eine foreach-Schleife und rufen für jede Activity die finish-Methode auf

Probieren wir das im Folgenden aus

In der dritten Activity registrieren wir einen Klick-Handler für den Button und rufen diese Sammlungsklasse auf.

Wir kapseln finishAll als statische Methode.

Um eine vollständige Beendigung sicherzustellen, können wir die Systemmethode killProcess nutzen, um den Prozess der App zu beenden.

android.os.Process.KillProcess(android.os.Process.myPid());

Activity-Manager-Klasse

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-Sprache: JavaScript (javascript)

Activities in der Basis-Activity hinzufügen und entfernen

Activity hinzufügen bei Erstellung: onCreate

Activity entfernen bei Zerstörung: 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("Aktuelle Activity",getClass().getSimpleName());
        ActivityHelper.add(this);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityHelper.remove(this);
    }
}Code-Sprache: JavaScript (javascript)

Button in Activity3 einfügen, um finishAll aufzurufen

<?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="Dritte Activity" />
    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="App beenden" />
</LinearLayout>Code-Sprache: HTML, XML (xml)
public class Activity3 extends BaseActivity {
    private static final String TAG = "Dritte 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-Sprache: PHP (php)

Operationen mit Activities

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert