一、思路和方法:
首先创建一个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(); } }); } }