您的位置:首页 > 移动开发 > Android开发

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

2015-05-12 10:52 555 查看
一、思路和方法:

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

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: