一个Android Activity管理器,用于管理活动的Activity

  • 向大家发一个Android Activity管理器,用于管理活动的Activity,可实现将一个activity添加到管理器、得到保存在管理器中的Activity对象、返回管理器的Activity是否为空、关闭所有活动的Activity除了指定的一个之外、移除Activity对象,如果它未结束则结束它、返回管理器中是否包含指定的名字,用于android开发时相当有用:

    001 package com.lurencun.cfuture09.androidkit.util.ui;
    002 import java.util.HashMap;
    003 import java.util.Set;
    004 import android.app.Activity;
    005 /**
    006  * 一个Activity管理器管理活动的Activity。
    007  * @author Geek_Soledad (66704238@51uc.com)
    008  */
    009 public class ActivityTaskManager {
    010     private static ActivityTaskManager activityTaskManager = null;
    011     private HashMap<String, Activity> activityMap = null;
    012     private ActivityTaskManager() {
    013         activityMap = new HashMap<String, Activity>();
    014     }
    015     /**
    016      * 返回activity管理器的唯一实例对象。
    017      * @return ActivityTaskManager
    018      */
    019     public static synchronized ActivityTaskManager getInstance() {
    020         if (activityTaskManager == null) {
    021             activityTaskManager = new ActivityTaskManager();
    022         }
    023         return activityTaskManager;
    024     }
    025     /**
    026      * 将一个activity添加到管理器。
    027      * @param activity
    028      */
    029     public Activity putActivity(String name, Activity activity) {
    030         return activityMap.put(name, activity);
    031     }
    032     /**
    033      * 得到保存在管理器中的Activity对象。
    034      * @param name
    035      * @return Activity
    036      */
    037     public Activity getActivity(String name) {
    038         return activityMap.get(name);
    039     }
    040     /**
    041      * 返回管理器的Activity是否为空。
    042      * @return 当且当管理器中的Activity对象为空时返回true,否则返回false。
    043      */
    044     public boolean isEmpty() {
    045         return activityMap.isEmpty();
    046     }
    047     /**
    048      * 返回管理器中Activity对象的个数。
    049      * @return 管理器中Activity对象的个数。
    050      */
    051     public int size() {
    052         return activityMap.size();
    053     }
    054     /**
    055      * 返回管理器中是否包含指定的名字。
    056      *
    057      * @param name
    058      *            要查找的名字。
    059      * @return 当且仅当包含指定的名字时返回true, 否则返回false。
    060      */
    061     public boolean containsName(String name) {
    062         return activityMap.containsKey(name);
    063     }
    064     /**
    065      * 返回管理器中是否包含指定的Activity。
    066      * @param activity
    067      *            要查找的Activity。
    068      * @return 当且仅当包含指定的Activity对象时返回true, 否则返回false。
    069      */
    070     public boolean containsActivity(Activity activity) {
    071         return activityMap.containsValue(activity);
    072     }
    073     /**
    074      * 关闭所有活动的Activity。
    075      */
    076     public void closeAllActivity() {
    077         Set<String> activityNames = activityMap.keySet();
    078         for (String string : activityNames) {
    079             finisActivity(activityMap.get(string));
    080         }
    081         activityMap.clear();
    082     }
    083     /**
    084      * 关闭所有活动的Activity除了指定的一个之外。
    085      * @param nameSpecified
    086      *            指定的不关闭的Activity对象的名字。
    087      */
    088     public void closeAllActivityExceptOne(String nameSpecified) {
    089         Set<String> activityNames = activityMap.keySet();
    090         Activity activitySpecified = activityMap.get(nameSpecified);
    091         for (String name : activityNames) {
    092             if (!name.equals(nameSpecified)) {
    093                 finisActivity(activityMap.get(name));
    094             }
    095         }
    096         activityMap.clear();
    097         activityMap.put(nameSpecified, activitySpecified);
    098     }
    099     /**
    100      * 移除Activity对象,如果它未结束则结束它。
    101      * @param name
    102      *            Activity对象的名字。
    103      */
    104     public void removeActivity(String name) {
    105         Activity activity = activityMap.remove(name);
    106         finisActivity(activity);
    107     }
    108     /**
    109      * 结束指定的Activity
    110      * @param activity
    111      *            指定的Activity。
    112      */
    113     private final void finisActivity(Activity activity) {
    114         if (activity != null && !activity.isFinishing()) {
    115             activity.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);   
        }   
    }   
}  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值