在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);
}
}
}

更多相关文章

  1. Android磁盘管理-之vold源码分析(2)
  2. Android的四个组件类型的使用实例
  3. Android各种屏幕的分布率以及自适应各种屏幕的开发研究
  4. ClipboardService(CBS)中的权限管理
  5. Android内存管理机制之幽灵杀手——LowMemory Killer
  6. 项目中的Activity统一管理 方便完全退出程序
  7. Android设置AlertDialog点击按钮对话框不关闭
  8. android――屏幕分辨率
  9. Android(安卓)资源文件的命名规则

随机推荐

  1. Android资源文件使用经验
  2. Android Internal和External Storage
  3. Android的EventBus和butterknife基本使用
  4. Android getViewById和getLayoutInflater
  5. NDK浅尝(1)
  6. android资源汇总(持续中......)
  7. android 按字母搜索
  8. Android之OpenGL ES基础知识篇
  9. android 中使用单元测试 Junit的步骤
  10. Android设计支持库(Android Design Suppo