活動的相關操作

取得目前的活動與基底活動類別

建立一個 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)

活動的相關操作

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *