由于在(Widget或Service、BroadcastReceiver中)使用startActivity()方法启动activity时需使用FLAG_ACTIVITY_NEW_TASK flag,所以在BaseActivity中使用setresult标记退出时不能完全退出应用程序(只能关闭通过广播打开的activity以及之后打开的activity)。
因此本文设计使用广播退出应用程序:
1、在退出事件中发送退出广播
Intent intent = new Intent();
intent.setAction("com.android.exitapp");
baseActivity.sendBroadcast(intent);
2、在BaseActivity中注册广播
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if (intent.getAction().equals("com.android.exitapp")) {
finish();
}
}
};
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction(SystemConst.EXIT_APP);
this.registerReceiver(this.broadcastReceiver, filter);
}
通过此法就可以退出所有activity了。