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(); } }