一、思路和方法:
首先创建一个ActivityManager类来存放Activity的对象。
返回ActivityManager的对象,供BaseActivity来进行操作。
所有其他子Activity都继承BaseActivity。
二、代码实现
ActivityManager 类:
package com.example.mydemo; import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry; import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.util.Log; public class ActivityManager { /**
* 注意,此处为单例模式,在BaseActivity中,只会返回一个对象。否则,每次被继承的BaseActivity在子Activity被创建的时候,
* 都会得到一个新的对象。每个新的对象下,又会创建自己的HashMap,效果就是,一个HashMap只存了一个activity,
* 显然与我们想要的结果不一样。
* 所以,必须使用单例模式
*/ private static ActivityManager activityManager; public static ActivityManager getActivityManager() {
if (activityManager == null) {
activityManager = new ActivityManager();
}
return activityManager;
} //此处,可有可无。
private ActivityManager() {
} /**
* task map,用于记录activity栈,方便退出程序(这里为了不影响系统回收activity,所以用软引用)
*/
private final HashMap<String, SoftReference<Activity>> taskMap = new HashMap<String, SoftReference<Activity>>(); /**
* 往应用task map加入activity
*/
public final void putActivity(Activity atv) {
taskMap.put(atv.toString(), new SoftReference<Activity>(atv));
Log.i("PutActivity", "" + atv);
} /**
* 往应用task map加入activity
*/
public final void removeActivity(Activity atv) {
taskMap.remove(atv.toString());
} /**
* 清除应用的task栈,如果程序正常运行这会导致应用退回到桌面
*/
public final void exit() {
for (Iterator<Entry<String, SoftReference<Activity>>> iterator = taskMap
.entrySet().iterator(); iterator.hasNext();) {
SoftReference<Activity> activityReference = iterator.next()
.getValue();
Activity activity = activityReference.get();
Log.i("ActivityList", "" + activity);
if (activity != null) {
activity.finish();
}
}
taskMap.clear();
} }
BaseActivity的代码:
package com.example.mydemo; import android.app.Activity;
import android.os.Bundle; public class BaseActivity extends Activity { private ActivityManager manager = ActivityManager.getActivityManager(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
manager.putActivity(this);
} @Override
protected void onDestroy() {
super.onDestroy();
manager.removeActivity(this);
} public void exit() {
manager.exit();
} }
子Activity只需要继承BaseActivity 就可以了。
退出所有Activity的Activity代码:
package com.example.mydemo; import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class FragmentsActivity extends BaseActivity {
private Button exit; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment); exit = (Button) findViewById(R.id.exit);
exit.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
exit();
}
}); } }