Android 退出应用

app退出应用,很多时候采用关闭当前进程的方式:

android.os.Process.killProcess(android.os.Process.myPid());

System.exit(0);

经测试发现这种方式不能正真退出进程,安卓系统在退出进程后会自动检查应用是否还有activity或service,如果有activity还在返回栈中或者service没有退出的话,会重新开启app,application的onCreate()方法会再次执行,并且系统会试图回到上一次退出时的activity。所以用这种方式不能完全退出应用。

目前比较流行的做法是在application中registerActivityLifecycleCallbacks,自己创建activity的管理栈。退出时finish掉所有的activity,如果要彻底退出的话再关闭掉所有的seveice:

在application中:

private static ListmActivitys =Collections.synchronizedList(new LinkedList());

@Override

public void onCreate() {

super.onCreate();

 registerActivityListener();

}

private void registerActivityListener() {

registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

@Override

        public void onActivityCreated(Activity activity,Bundle savedInstanceState) {

/**

            *  监听到 Activity创建事件 将该 Activity 加入list

*/

            pushActivity(activity);

}

@Override

        public void onActivityStarted(Activity activity) {

}

@Override

        public void onActivityResumed(Activity activity) {

}

@Override

        public void onActivityPaused(Activity activity) {

}

@Override

        public void onActivityStopped(Activity activity) {

}

@Override

        public void onActivitySaveInstanceState(Activity activity,Bundle outState) {

}

@Override

        public void onActivityDestroyed(Activity activity) {

if (null ==mActivitys &&mActivitys.isEmpty()) {

return;

}

if (mActivitys.contains(activity)) {

/**

                *  监听到 Activity销毁事件 将该Activity 从list中移除

                */

                popActivity(activity);

}

}

});

}

/**

* @param activity 作用说明 :添加一个activity到管理里

*/

public void pushActivity(Activity activity) {

mActivitys.add(activity);

RYLogUtils.d(TAG,"activityList:size:" +mActivitys.size());

}

/**

* @param activity 作用说明 :删除一个activity在管理里

*/

public void popActivity(Activity activity) {

mActivitys.remove(activity);

RYLogUtils.d(TAG,"activityList:size:" +mActivitys.size());

}

/**

* 结束所有Activity

*/

public static void finishAllActivity() {

if (mActivitys ==null) {

return;

}

for (Activity activity :mActivitys) {

activity.finish();

}

mActivitys.clear();

}

/**

* 退出应用程序

*/

public void appExit() {

try {

RYLogUtils.e(TAG,"app exit");

finishAllActivity();

stopService(new Intent(this,xxxxx.class));

android.os.Process.killProcess(android.os.Process.myPid());

System.exit(0);

}catch (Exception e) {

}

}

这样就可以完全退出app

你可能感兴趣的:(Android 退出应用)