Android一次退出所有Activity的方法(升级版)
2015-05-12 10:52
555 查看
一、思路和方法:
首先创建一个ActivityManager类来存放Activity的对象。
返回ActivityManager的对象,供BaseActivity来进行操作。
所有其他子Activity都继承BaseActivity。
二、代码实现
ActivityManager 类:
BaseActivity的代码:
子Activity只需要继承BaseActivity 就可以了。
退出所有Activity的Activity代码:
首先创建一个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(); } }); } }
相关文章推荐
- Android一次退出所有Activity的方法(升级版)
- Android 一次退出所有activity的方法
- Android 一次退出所有activity的方法
- android中实现完全退出程序方法(退出所有activity)
- android开发游记:关闭所有Activity安全退出应用的方法总结
- Android实现退出时关闭所有Activity的方法
- Android中知道界面是哪个activity,一次结束所有Activity退出程序
- android程序完全退出,销毁所有activity方法
- unity在android显示界面(UnityPlayerActivity)不重复加载且app退出杀掉所有界面的两种方法
- 退出Android程序时清除所有activity的实现方法
- Android 退出程序 关闭所有Activity 的方法
- Android 退出程序时关闭所有的activity的几种方法
- #android--自定义栈管理Activity,实现一次退出所有的Activity
- 退出Android程序时清除所有activity的实现方法
- Android例子—关闭所有Activity_完全退出App的方法
- Android 2.2关闭所有Activity完全退出程序方法
- 广播的妙用-android程序完全退出,销毁所有activity方法
- Android退出时关闭所有Activity的方法
- 退出清理所有Activity方法
- android退出所有activity