1 发送广播的方式
退出应用时向每个activity发送广播使其finish。
① 所有Activity继承BaseActivity,在BaseActivity中定义退出广播
class ExitAppReceiver extends BroadcastReceiver{ public static final String ACTION="exitAppReceiver"; @Override public void onReceive(Context context, Intent intent) { finish(); } }② 在其中注册广播
IntentFilter intentFilter = new IntentFilter(ExitAppReceiver.ACTION); exitAppReceiver = new ExitAppReceiver(); registerReceiver(exitAppReceiver,intentFilter);
别忘了onDestroy时注销广播
@Override protected void onDestroy() { unregisterReceiver(exitAppReceiver); super.onDestroy(); }
③ 退出时发送广播
protected void exitApp() { sendBroadcast(new Intent(ExitAppReceiver.ACTION)); }
2 使用activity集合的方式
将每个activity放到List中,退出应用时逐个finish。
① 在应用入口MyAppcation中定义
public List<Activity> atyList = new ArrayList<>();② 在BaseActivity的onCreate中加入
((MyApplication)getApplication()).atyList.add(this);在onDestroy中加入
MyApplication app = (MyApplication) getApplication(); int index = app.atyList.indexOf(this); if(index>=0){ app.atyList.remove(index); }③退出应用时逐个finish
protected void exitApp() { App app = (App) getApplication(); if(app.atyList!=null && !app.atyList.isEmpty()){ for(Activity aty : app.atyList){ aty.finish(); } } }
3 如果应用只有一个退出应用的地方的话,如MainActivity,而且保证了MainActivity在栈顶时栈中只有一个activity实例,那么调用下面任一个方法即可。
android.os.Process.killProcess(android.os.Process.myPid())
或finish();
或
System.exit(0);
注意:单独调用android.os.Process.killProcess(android.os.Process.myPid())或System.exit(0);只能关闭当前activity,不能退出应用