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();
        }
    }
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章