Android一键退出

1. 一键退出思路

1.1 实现页面不可见

  • Activity 启动时,将这个 Activity 实例添加到 List 中
  • Activity 销毁时,将这个 Activity 实例移除 List
  • 在需要一键退出时,将这个 List 中的所有实例全部结束掉,并清空 List

1.2 实现杀死当前进程

页面不可见不代表应用完全退出,还需要杀掉这个应用程序对应的进程,杀掉进程有两种方法

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

这个方法对应的包名为:

package android.os;

  • System.exit();

这个方法对应的包名为:

package java.lang;

exit() 中可以传入整数型参数,传入 0 时,通知系统正常退出;传入其他整数时,通知系统异常退出。

1.3 备注项

  • Android 中所有的 Activity 都在主进程中运行
  • Service 不是一个单独的进程也不是一个线程

代码实现

  • MainActivity.java

    package com.demo.thorn.onekeyexitdemo;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    
    import static android.os.Process.killProcess;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ActivityCollector.addActivity(this);//在所有 Activity 的 onCreate 方法中添加自身的实例
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            ActivityCollector.removeActivity(this);//在所有 Activity 的 onDestroy 方法中移除自身的实例
        }
    
        public void oneKeyExit(View view) {
            ActivityCollector.onKeyExit();//在 list 中结束所有活动实例
            killProcess(android.os.Process.myPid());//方法一、杀掉当前程序的进程
            //System.exit(0);//方法二、 java 中的退出当前线程的方法
        }
    }
    
  • ActivityCollector.java

    package com.demo.thorn.onekeyexitdemo;
    
    import android.app.Activity;
    import java.util.ArrayList;
    
    public class ActivityCollector {
        public static ArrayList<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 onKeyExit(){
            for(Activity activity:activities){
                if(activity.isFinishing()){
                    activity.finish();
                }
            }
            activities.clear();
        }
    }
    

猜你喜欢

转载自blog.csdn.net/baidu_33221362/article/details/80990608