Android 退出应用程序
如何干凈徹底地退出Android應(yīng)用程序,如何干凈地關(guān)閉所有已打開的Activity? 如何關(guān)閉指定的Activity? 如何關(guān)閉一類Activity?
搜索了一下,有以下一些
1. 任務(wù)管理器方法(ActivityManager)
首先要說明該方法運行在Android 1.5 API Level為3以上才可以,
系統(tǒng)會將,該包下的,所有進程,服務(wù),全部殺掉
要注意加上權(quán)限
<uses-permission android:name="android.permission.RESTART_PACKAGES\"></uses-permission>2. Dalvik VM的本地方法
android.os.Process.killProcess(android.os.Process.myPid()) //獲取PID System.exit(0); //常規(guī)java、c#的標準退出法,返回值為0代表正常退出killProcess( )需要添加權(quán)限
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES\"></uses-permission>3.一種比較流行的Android退出方法
使用單例模式創(chuàng)建一個Activity管理對象,該對象中有一個Activity容器(具體實現(xiàn)自己處理,使用LinkedList等)專門負責存儲新開啟的每一個Activity,容易理解、易于操作。
我的代碼就是使用第三種方法,通過創(chuàng)建一個 Activity界面管理工具類實現(xiàn)的。
package com.demo.android.model;import android.app.Activity;import com.demo.util.LogUtils;import java.util.ArrayList; import java.util.Iterator; import java.util.List;/*** Activity界面管理工具*/ public final class ActivityManager {private static List<Activity> activities = new ArrayList<Activity>();// 普通Activity/*** 添加普通Activity* * @param activity*/public static void addActivity(Activity activity) {if (activities.contains(activity)) {removeActivity(activity);}activities.add(activity);LogUtils.debug("ActivityManager--enter", activity.getClass().getSimpleName());}/*** 刪除普通Activity* * @param activity*/public static void removeActivity(Activity activity) {activities.remove(activity);LogUtils.debug("ActivityManager--exit", activity.getClass().getSimpleName());}/*** 結(jié)束普通Activity的棧頂?shù)脑? */public static void getTopActivityAndFinish() {Activity top = activities.get(activities.size() - 1);removeActivity(top);top.finish();}public static boolean isActivityTop(String name){Activity top = activities.get(activities.size() - 1);return top.getClass().getSimpleName().equals(name);}/*** 結(jié)束當前之外的Activity*/public static void finishNotTopActivity(Activity top) {Iterator<Activity> iterator = activities.iterator();while (iterator.hasNext()) {Activity activity = iterator.next();if (top != activity) {iterator.remove();activity.finish();}}}/*** 結(jié)束所有activity*/public static void finishAllActivity() {Iterator<Activity> iterator = activities.iterator();while (iterator.hasNext()) {Activity activity = iterator.next();iterator.remove();activity.finish();}}public static void backToActivity(String toActivity) {List<Activity> needRemove = new ArrayList<Activity>();for (int i = activities.size() - 1; i < activities.size(); i--) {if (i >= 0) {Activity activity = activities.get(i);if (toActivity.equals(activity.getClass().getSimpleName())) {break;}needRemove.add(activity);// removeActivity(activity);// activity.finish();}}activities.removeAll(needRemove);// finish后對象銷毀,確保上一步準確執(zhí)行還是提出來做for (Activity activity : needRemove) {activity.finish();}} }在BaseActivity中添加
public class BaseActivity extends AnActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ActivityManager.addActivity(this);.....} } @Overrideprotected void onDestroy() {....ActivityManager.removeActivity(this);super.onDestroy();}在點擊退出程序的時候,執(zhí)行
ActivityManager.finishAllActivity();其他的關(guān)閉Activity方法網(wǎng)上相關(guān)的說明
- finish():結(jié)束當前Activity,不會立即釋放內(nèi)存。遵循android內(nèi)存管理機制。
- exit():結(jié)束當前組件如Activity,并立即釋放當前Activity所占資源。
- killProcess():結(jié)束當前組件如Activity,并立即釋放當前Activity所占資源。
- restartPackage():結(jié)束整個App,包括service等其它Activity組件。
特別注意:
除了finish()方法可以調(diào)用Activity的生命周期方法如onStop()、onDestroy(),其余三種退出App均不會調(diào)用Activity的生命周期方法。除非,在調(diào)用這幾個方法之前或者之后主動調(diào)用Activity的生命周期方法。如:
System.exit(int);
onDestroy();
總結(jié)
以上是生活随笔為你收集整理的Android 退出应用程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 开发技能图谱
- 下一篇: AndroidStudio Refres