取得目前的活動與基底活動類別
建立一個 Java 基底類別,名為 BaseActivity 並讓它繼承
android.support.v7.app.AppCompatActivity
接著在這個基底類別裡覆寫 onCreate 方法
然後在裡面加入日誌
Log.d(“目前活動”,getClass().getSimpleName());
這樣不管我們切換到哪個活動,都能知道當前是哪一個
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("目前活動",getClass().getSimpleName());
}
}Code language: JavaScript (javascript)
05-13 08:36:47.473 18499-18499/? D/目前活動: MainActivity
05-13 08:36:56.460 18499-18499/com.foxdevelop.www.lifedemo D/目前活動: NormalActivity
05-13 08:37:03.839 18499-18499/com.foxdevelop.www.lifedemo D/目前活動: Activity3
05-13 08:38:11.104 18499-18499/com.foxdevelop.www.lifedemo D/目前活動: NormalActivity
一鍵退出程式
如果我們現在在第三個活動,要退出程式得按三次返回鍵,很不方便
按 Home 並不是退出程式,只是把程式暫停在背景。
那如果想要一鍵退出程式該怎麼做?
我們可以寫一個專用的集合類別,用來管理所有活動。
新增一個活動管理器來處理這個需求
這是一個集合類別,內有 List 存放所有活動。提供 add 與 remove 方法,新增、刪除清單內的單一活動
接著在基底 Activity 裡,於 onCreate 呼叫 add,onDestroy 呼叫 remove
這樣就能確保 List 存放的都是堆疊裡正在運行的活動
因為 List 儲存的是各個活動的參考,呼叫 finish 就等同於操作該活動實體。
接著幫集合類別加上 finishAll 方法
這個方法使用 foreach 迴圈,分別呼叫每個活動的 finish
接下來我們實測看看
在第三個活動裡,幫按鈕註冊點擊事件,再呼叫這個集合類別。
把 finishAll 封裝成靜態方法。
為了確保程式完全結束,可使用系統 killProcess 方法,終止目前程式的行程。
android.os.Process.KillProcess(android.os.Process.myPid());
活動管理器類別
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)
在基底活動新增與移除活動
活動建立時加入清單:onCreate
活動銷毀時移除清單: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("目前活動",getClass().getSimpleName());
ActivityHelper.add(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityHelper.remove(this);
}
}Code language: JavaScript (javascript)
在 Activity3 新增按鈕呼叫 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="第三個活動" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="離開應用程式" />
</LinearLayout>Code language: HTML, XML (xml)
public class Activity3 extends BaseActivity {
private static final String TAG = "第三個活動";
@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)
活動的相關操作
Previous: 活動的啟動模式
Next: 啟動 Activity 的更佳寫法