1.
通过在Application中创建一个list进行管理
// activity对象列表,用于activity统一管理
private List<Activity> activityList;
private static MyApplication myApplication = null;
@Override
public void onCreate() {
super.onCreate();
myApplication = this;
activityList = new ArrayList<Activity>();
}
private MyApplication(){
}
public static MyApplication getApplication(){
return myApplication;
}
// activity管理:从列表中移除activity,按回退建时可单独调用
public void removeActivity(Activity activity) {
if (activityList.contains(activity))
activityList.remove(activity);
}
// activity管理:添加activity到列表
public void addActivity(Activity actClass) {
if (!activityList.contains(actClass))
activityList.add(actClass);
}
// activity管理:结束所有activity
public void finishAllActivity() {
for (Activity activity : activityList) {
if (null != activity) {
activity.finish();
}
}
}
@Override
public void onTerminate() {
super.onTerminate();
finishAllActivity();
android.os.Process.killProcess(android.os.Process.myPid()); //获取PID
System.exit(0);
}
}
在我们需要退出程序的时候执行下面代码:
手动调用 onTerminate()即可
另外,程序的activity基类如BaseActivity的两个方法中分别调用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyApplication.getApplication().addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
MyApplication.getApplication().removeActivity(this);
}
2. 推荐用广播的方式去关闭整个应用程序,思路就是为所有的Activity创建一个父类,只要在父类中注册一个自定义关闭应用广播即可实现,仔细想了一下这个方法是可行的,只要在基类中动态注册一个广播就可实现这个功能.
代码如下
ExitAppReceiver:
package com.example.appexitdemo;
import android.app.Activity;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.FragmentActivity;
//自定义一个广播接收器,用来接收应用程序退出广播.
public class ExitAppReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (context != null) {
if (context instanceof Activity) {
((Activity) context).finish();
} else if (context instanceof FragmentActivity) {
((FragmentActivity) context).finish();
} else if (context instanceof Service) {
((Service) context).stopSelf();
}
}
}
}
|
package com.example.appexitdemo;
import android.app.Activity;
import android.content.IntentFilter;
import android.os.Bundle;
//应用程序中所有Activity的基类
public class BaseActivity extends Activity {
private ExitAppReceiver exitReceiver = new ExitAppReceiver();
// 自定义退出应用Action,实际应用中应该放到整个应用的Constant类中.
private static final String EXIT_APP_ACTION = "com.micen.exit_app";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
registerExitReceiver();
}
private void registerExitReceiver() {
IntentFilter exitFilter = new IntentFilter();
exitFilter.addAction(EXIT_APP_ACTION);
registerReceiver(exitReceiver, exitFilter);
}
private void unRegisterExitReceiver() {
unregisterReceiver(exitReceiver);
}
@Override
protected void onDestroy() {
super.onDestroy();
unRegisterExitReceiver();
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onStop() {
super.onStop();
}
}
|
在App退出方法中添加以下发送广播代码即可:
Intent intent = new Intent();
intent.setAction(EXIT_APP_ACTION);
sendBroadcast(intent);
|