Android 退出应用程序

来源:互联网 发布:软件研发任务分配 编辑:程序博客网 时间:2024/05/17 06:36

如何干净彻底地退出Android应用程序,如何干净地关闭所有已打开的Activity? 如何关闭指定的Activity? 如何关闭一类Activity?

搜索了一下,有以下一些

1. 任务管理器方法(ActivityManager)

首先要说明该方法运行在Android 1.5 API Level为3以上才可以,
系统会将,该包下的,所有进程,服务,全部杀掉

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

要注意加上权限

<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);   //常规java、c#的标准退出法,返回值为0代表正常退出

killProcess( )需要添加权限

<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES\"></uses-permission>

3.一种比较流行的Android退出方法

使用单例模式创建一个Activity管理对象,该对象中有一个Activity容器(具体实现自己处理,使用LinkedList等)专门负责存储新开启的每一个Activity,容易理解、易于操作。


我的代码就是使用第三种方法,通过创建一个 Activity界面管理工具类实现的。

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());    }    /**     * 结束普通Activity的栈顶的元素     *      */    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);    }    /**     * 结束当前之外的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();            }        }    }    /**     * 结束所有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后对象销毁,确保上一步准确执行还是提出来做        for (Activity activity : needRemove) {            activity.finish();        }    }}

在BaseActivity中添加

public class BaseActivity extends AnActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        ActivityManager.addActivity(this);        .....    }}@Override    protected void onDestroy() {        ....        ActivityManager.removeActivity(this);        super.onDestroy();    }

在点击退出程序的时候,执行

ActivityManager.finishAllActivity();

其他的关闭Activity方法网上相关的说明

  • finish():结束当前Activity,不会立即释放内存。遵循android内存管理机制。
  • exit():结束当前组件如Activity,并立即释放当前Activity所占资源。
  • killProcess():结束当前组件如Activity,并立即释放当前Activity所占资源。
  • restartPackage():结束整个App,包括service等其它Activity组件。

特别注意:
除了finish()方法可以调用Activity的生命周期方法如onStop()、onDestroy(),其余三种退出App均不会调用Activity的生命周期方法。除非,在调用这几个方法之前或者之后主动调用Activity的生命周期方法。如:
System.exit(int);
onDestroy();

1 0
原创粉丝点击