一键退出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即可。