Android一次退出所有Activity的方法(升级版)

来源:互联网 发布:linux清除日志命令 编辑:程序博客网 时间:2024/05/16 07:49
一、思路和方法:

首先创建一个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();            }        });    }}

 

0 0
原创粉丝点击