Android 一键退出APP 实现

一键退出APP的思路: 关闭所有的Activity(不需要kill进程)

首先,创建一个activity管理类,代码如下:

/**
 * Activity管理器:用于Activity管理和应用程序退出
 */

public class ActivityCollector {

    public static List<Activity> activities = new ArrayList<>();

    public static void addActivity(Activity activity) {
        activities.add(activity);
    }

    public static void removeActivity(Activity activity) {
        activities.remove(activity);
    }

    public static void finishAllActivity() {
        for (Activity activity : activities) {
            if (!activity.isFinishing()) {
                activity.finish();
            }
        }
    }

}

然后,在所有Activity的共同父类(如:BaseActivity)的onCreate方法和onDestroy方法里,分别调用ActivityCollector.addActivity(this)方法和ActivityCollector.removeActivity(this)方法,代码如下:

/**
 * BaseActivity:所有的Activity都将继承这个类
 */

public class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityCollector.addActivity(this);//每启动一个Activity,就将其加入到activity列表中
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityCollector.removeActivity(this);//当一个Activity调用onDestroy方法时,就将其从activity列表中删除
    }
}

最后,在需要一键退出APP的地方,调用ActivityCollector.finishAllActivity()方法即可。

 

注:

在网上看到很多说,退出APP要kill掉进程,通过调用 killProcess(android.os.Process.myPid()); 或者 System.exit(0); 方法, 我在ActivityCollector类的 finishAllActivity(); 方法的最后,添加了 killProcess(android.os.Process.myPid());方法后,运行APP,当调用 finishAllActivity(); 方法退出APP后,程序的进程是被kill掉了,但是过了一会儿后,又有新的进程产生; 调用System.exit(0);方法也是一样的。

其实,killProcess(android.os.Process.myPid()); 或 System.exit(0);方法都不应该直接调用, 进程是由系统底层进行管理的,android 系统会自己进行进程的处理回收:ActivityManager 一直监听着进程状态,如果发现进程被kill掉,会进行重启。正常情况下退出应用以后系统就会回收 app 进程, 但当 app 中有需要长时间运行的服务(比如消息推送)时系统就不会 kill 掉进程,即使我们手动 kill 掉进程, 进程也会自动重启。

所以,退出Android应用的话,finish掉所有的Activity即可。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值