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