-
向大家发一个Android Activity管理器,用于管理活动的Activity,可实现将一个activity添加到管理器、得到保存在管理器中的Activity对象、返回管理器的Activity是否为空、关闭所有活动的Activity除了指定的一个之外、移除Activity对象,如果它未结束则结束它、返回管理器中是否包含指定的名字,用于android开发时相当有用:
001packagecom.lurencun.cfuture09.androidkit.util.ui;002importjava.util.HashMap;003importjava.util.Set;004importandroid.app.Activity;005/**006* 一个Activity管理器管理活动的Activity。007* @author Geek_Soledad (66704238@51uc.com)008*/009publicclassActivityTaskManager {010privatestaticActivityTaskManager activityTaskManager =null;011privateHashMap<String, Activity> activityMap =null;012privateActivityTaskManager() {013activityMap =newHashMap<String, Activity>();014}015/**016* 返回activity管理器的唯一实例对象。017* @return ActivityTaskManager018*/019publicstaticsynchronizedActivityTaskManager getInstance() {020if(activityTaskManager ==null) {021activityTaskManager =newActivityTaskManager();022}023returnactivityTaskManager;024}025/**026* 将一个activity添加到管理器。027* @param activity028*/029publicActivity putActivity(String name, Activity activity) {030returnactivityMap.put(name, activity);031}032/**033* 得到保存在管理器中的Activity对象。034* @param name035* @return Activity036*/037publicActivity getActivity(String name) {038returnactivityMap.get(name);039}040/**041* 返回管理器的Activity是否为空。042* @return 当且当管理器中的Activity对象为空时返回true,否则返回false。043*/044publicbooleanisEmpty() {045returnactivityMap.isEmpty();046}047/**048* 返回管理器中Activity对象的个数。049* @return 管理器中Activity对象的个数。050*/051publicintsize() {052returnactivityMap.size();053}054/**055* 返回管理器中是否包含指定的名字。056*057* @param name058* 要查找的名字。059* @return 当且仅当包含指定的名字时返回true, 否则返回false。060*/061publicbooleancontainsName(String name) {062returnactivityMap.containsKey(name);063}064/**065* 返回管理器中是否包含指定的Activity。066* @param activity067* 要查找的Activity。068* @return 当且仅当包含指定的Activity对象时返回true, 否则返回false。069*/070publicbooleancontainsActivity(Activity activity) {071returnactivityMap.containsValue(activity);072}073/**074* 关闭所有活动的Activity。075*/076publicvoidcloseAllActivity() {077Set<String> activityNames = activityMap.keySet();078for(String string : activityNames) {079finisActivity(activityMap.get(string));080}081activityMap.clear();082}083/**084* 关闭所有活动的Activity除了指定的一个之外。085* @param nameSpecified086* 指定的不关闭的Activity对象的名字。087*/088publicvoidcloseAllActivityExceptOne(String nameSpecified) {089Set<String> activityNames = activityMap.keySet();090Activity activitySpecified = activityMap.get(nameSpecified);091for(String name : activityNames) {092if(!name.equals(nameSpecified)) {093finisActivity(activityMap.get(name));094}095}096activityMap.clear();097activityMap.put(nameSpecified, activitySpecified);098}099/**100* 移除Activity对象,如果它未结束则结束它。101* @param name102* Activity对象的名字。103*/104publicvoidremoveActivity(String name) {105Activity activity = activityMap.remove(name);106finisActivity(activity);107}108/**109* 结束指定的Activity110* @param activity111* 指定的Activity。112*/113privatefinalvoidfinisActivity(Activity activity) {114if(activity !=null&& !activity.isFinishing()) {115activity.finish();116}117}118}
在BlackBerry中,提供了一个管理Screen的栈,用来从任何地方来关闭位于最上一层的Screen,使用UiApplication.getUiApplication().getActiveScreen()来得到位于最上一层的Screen的实例,并且使用UiApplication.getUiApplication().popScreen()来关闭一个Screen或关闭当前最上一层的Screen,但是Android却未提供相应的功能,只能在一个Activity的对象里面调用finish来关闭自己,不能关闭其他的Activity。比如我们想实现一个功能从屏幕A—>屏幕B—>屏幕C—>屏幕D,然后在在转到屏幕D之前将屏幕B和C关闭,在屏幕B和屏幕C界面点击会退按钮都可以回退到上一个屏幕,但是在屏幕D上点击会退按钮让其回退到A,此外在一些循环跳转的界面上如果不在合适的地方将一些不需要的屏幕关闭,那么经过多次跳转后回导致内存溢出。对此我们可以设计一个全局的Activity栈,使用这个栈来管理Activity。管理Activity的类的定义如下:
import java.util.Stack;
import android.app.Activity;
public class ScreenManager {
private static Stack<Activity> activityStack;
private static ScreenManager instance;
private ScreenManager(){
}
public static ScreenManager getScreenManager(){
if(instance==null){
instance=new ScreenManager();
}
return instance;
}
public void popActivity(){
Activity activity=activityStack.lastElement();
if(activity!=null){
activity.finish();
activity=null;
}
}
public void popActivity(Activity activity){
if(activity!=null){
activity.finish();
activityStack.remove(activity);
activity=null;
}
}
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
public void pushActivity(Activity activity){
if(activityStack==null){
activityStack=new Stack<Activity>();
}
activityStack.add(activity);
}
public void popAllActivityExceptOne(Class cls){
while(true){
Activity activity=currentActivity();
if(activity==null){
break;
}
if(activity.getClass().equals(cls) ){
break;
}
popActivity(activity);
}
}
}
本文介绍了一个用于管理Android应用中Activity的工具类,提供了添加、获取、判断空、关闭所有、移除并结束特定Activity等功能,有效解决Android应用中Activity管理难题。
750

被折叠的 条评论
为什么被折叠?



