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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,574评论 25 709
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,908评论 0 17
  • Day1: 在代码中通过R.string.hello_world可以获得该字符串的引用; 在XML中通过@stri...
    冰凝雪国阅读 5,367评论 0 5
  • 自从2012年10月从一览辞职开始“创业”到现在,不到两年的时间内经历了4家雇主(带自己5家):当初为了一时解决温...
    光华同学阅读 3,177评论 0 51
  • 对于上班一年的菜鸟来说,关于阿谀奉承,左右逢源还是看不惯。 为什么选择这个工作,是觉得想单纯一些,少点套路。我不擅...
    小雀斑妹纸阅读 4,177评论 1 2

友情链接更多精彩内容