天天看點

Android--關閉所有Activity、退出應用

Android程式有很多Activity,比如說主視窗A,調用了子視窗B,如果在B中直接finish(), 接下裡顯示的是A。在B中如何關閉整個Android應用程式呢?

以下幾種比較簡單方法可以實作!

1. Dalvik VM的本地方法

 android.os.Process.killProcess(android.os.Process.myPid())    //擷取PID

 System.exit(0);   //正常java、c#的标準退出法,傳回值為0代表正常退出

2. 任務管理器方法

  首先要說明該方法運作在Android 1.5 API Level為3以上才可以,同時需要權限

 ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);

 am.restartPackage(getPackageName());

 系統會将,該包下的 ,所有程序,服務,全部殺掉,就可以殺幹淨了,要注意加上

3. 根據Activity的聲明周期

3.  我們知道Android的視窗類提供了曆史棧,我們可以通過stack的原理來巧妙的實作,這裡我們在A視窗打開B視窗時在Intent中直接加入标 志     Intent.FLAG_ACTIVITY_CLEAR_TOP,這樣開啟B時将會清除該程序空間的所有Activity。

在A視窗中使用下面的代碼調用B視窗

Intent intent = new Intent();

intent.setClass(Android123.this, CWJ.class);

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  //注意本行的FLAG設定

startActivity(intent);

接下來在B視窗中需要退出時直接使用finish方法即可全部退出。

4.自定義一個Actiivty 棧,道理同上,不過利用一個單例模式的Activity棧來管理所有Activity。并提供退出所有Activity的方法。代碼如下:

import java.util.Stack;

import android.app.Activity;

public class ScreenManager {

    private static Stack activityStack;

    private static ScreenManager instance;

    private ScreenManager() {

    }

    public static ScreenManager getScreenManager() {

        if (instance == null) {

            instance = new ScreenManager();

        }

        return instance;

    }

    // 退出棧頂Activity

    public void popActivity(Activity activity) {

        if (activity != null) {

            activity.finish();

            activityStack.remove(activity);

            activity = null;

        }

    }

    // 獲得目前棧頂Activity

    public Activity currentActivity() {

        Activity activity = activityStack.lastElement();

        return activity;

    }

    // 将目前Activity推入棧中

    public void pushActivity(Activity activity) {

        if (activityStack == null) {

            activityStack = new Stack();

        }

        activityStack.add(activity);

    }

    // 退出棧中所有Activity

    public void popAllActivityExceptOne(Class cls) {

        while (true) {

            Activity activity = currentActivity();

            if (activity == null) {

                break;

            }

            if (activity.getClass().equals(cls)) {

                break;

            }

            popActivity(activity);

        }

    }

}

轉載:http://www.cnblogs.com/crane13/archive/2013/05/31/3150157.html