题外话:我们有时在开发中,通常会有如下的需求:屏幕1-->屏幕2-->屏幕3-->屏幕4...,现在需要直接从屏幕4-->屏幕1,很多人会想到对activity进行管理得到对应的id什么的,我这里说一个方法,在转到屏幕4之前将屏幕2和3关闭,那么就可以实现我们的需求了,下面是具体的实现

我们要在进行BlackBerry程序开发的时候,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的类的定义如下:

Java代码:

  1. import java.util.Stack;
  2. import android.app.Activity;
  3. public class ScreenManager {
  4. private static Stack<Activity> activityStack;
  5. private static ScreenManager instance;
  6. private ScreenManager(){
  7. }
  8. public static ScreenManager getScreenManager(){
  9. if(instance==null){
  10. instance=new ScreenManager();
  11. }
  12. return instance;
  13. }
  14. public void popActivity(){
  15. Activity activity=activityStack.lastElement();
  16. if(activity!=null){
  17. activity.finish();
  18. activity=null;
  19. }
  20. }
  21. public void popActivity(Activity activity){
  22. if(activity!=null){
  23. activity.finish();
  24. activityStack.remove(activity);
  25. activity=null;
  26. }
  27. }
  28. public Activity currentActivity(){
  29. Activity activity=activityStack.lastElement();
  30. return activity;
  31. }
  32. public void pushActivity(Activity activity){
  33. if(activityStack==null){
  34. activityStack=new Stack<Activity>();
  35. }
  36. activityStack.add(activity);
  37. }
  38. public void popAllActivityExceptOne(Class cls){
  39. while(true){
  40. Activity activity=currentActivity();
  41. if(activity==null){
  42. break;
  43. }
  44. if(activity.getClass().equals(cls) ){
  45. break;
  46. }
  47. popActivity(activity);
  48. }
  49. }
  50. }

复制代码

Stack<Activity>这个就是我们自定义的activity栈,这个写好后,我们就开始一步一步的来实现我们要跳转的界面了。用了这个Stack<Activity>就给我们节省很多的资源和时间,有了这个我们页就不用那么麻烦了               

                 从上面的代码我们知道了在每个方法的下面都会用到判断,这个是非常主要的,因为当我们判断完事了,才可以执行下面的代码,就像是我们要跳转界面一样,我们这个跳转的话,是必须你同意才能跳转的,如果没有判断的话,当你到达这个界面的时候,就不会停止在这个界面,而是再跳到下一个界面,这样就会出现bug。所以大家一定要记住这个。

activty栈管理的更多相关文章

  1. Activity 生命周期及其栈管理方式

    Activity 生命周期 Android 系统用栈的形式管理 Activity , 当新的 Activity 被创建是, 会被放置到栈顶, 这个 Activity 会进入到运行状态, 而前一个 Ac ...

  2. 安全退出app,activoty栈管理

    前言 由于一个同学问到我如何按照一个流程走好之后回到首页,我以前看到过4个解决方案,后来发现有做个记录和总结的必要,就写了这篇博文.(之前看小强也写过一篇,这里通过自身的分析完整的总结一下以下6种方案 ...

  3. ActivityJump+ActivityManager【Activity之间的跳转和Activity任务栈管理】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装Activity跳转的方法以及实现Activity任务栈管理. 效果图   代码分析 ActivityJump:封装Activi ...

  4. Android解析ActivityManagerService(二)ActivityTask和Activity栈管理

    前言 关于AMS,原计划是只写一篇文章来介绍,但是AMS功能繁多,一篇文章的篇幅远远不够.这一篇我们接着来学习与AMS相关的ActivityTask和Activity栈管理. 1.ActivitySt ...

  5. activity之栈管理

    在android中.一个activity组件能够激活还有一个activity组件:本程序activity和其他程序的activity.     若新的被激活的activity组件属于还有一个应用程序, ...

  6. activity的启动模式和栈管理

     在学习Android的过程中,Intent是我们最常用Android用于进程内或进程间通信的机制,其底层的通信是以Binder机制实现的,在物理层则是通过共享内存的方式实现的.     Intent ...

  7. android的activity栈管理

    在进行BlackBerry程序开发的时候,BlackBerry提供了一个管理Screen的栈,用来从任何地方来关闭位于最上一层的Screen,使用UiApplication.getUiApplicat ...

  8. 06 获取Activity的栈管理器

    代码 <span style="font-size:18px;">package com.fmy.day8_29task.util; import java.util. ...

  9. ActivityManagerService数据结构Activity栈管理(二)

    ActivityManagerService要管理四大组件,那四大组件就必须在AMS中有存在的形式,这里先从AMS 如何管理Activity 谈起: Activity在AMS 中存在的形式为Activ ...

随机推荐

  1. windows版本的phantomjs-2.1.1-windows安装

    windows版本的phantomjs-2.1.1-windows安装 1.下载 链接:http://pan.baidu.com/s/1dEUl6dN 密码:oij8 2.安装 下载好之后解压放到某个 ...

  2. 个人建站&mac下安装hexo

    title: 个人建站&mac下安装hexo date: 2018-04-18 16:34:02 tags: [mac,blog,个人建站,markdown] --- 这两天使用了markdo ...

  3. codeforces round #419 E. Karen and Supermarket

    On the way home, Karen decided to stop by the supermarket to buy some groceries. She needs to buy a ...

  4. UVA11552:Fewest Flops

    发现如果只有一块就是种类的数目,也就是同种放在一起, 再考虑多块,如果违背的上面的规律,可以发现不会更优, 于是问题就是求在满足同种类放在一起的前提下,尽量使得相邻块的两端一模一样 然后dp一下就可以 ...

  5. [LSGDOJ 1299]搭配买卖

    题目描述 joe觉得云朵很美,决定去山上的商店买一些云朵.商店里有n多云,云朵被编号为1,2,……,n,并且每朵云都有一个价值.但商店老板跟他说,一些云朵要搭配来买才好,所以买一朵云则与这多云有搭配的 ...

  6. hdu 5480(前缀和)

    题意:如果一个点,则这点的横竖皆被占领,询问矩阵是否全被占领. 思路:将被占领的x,y标记为1,用x表示1 - i的和 如果x轴的差为 x2 - x1 + 1则表示全被占领,y轴同理 #include ...

  7. [HNOI2006]超级英雄

    题目描述 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目,只有当选手正确回答一道题后,才 ...

  8. hdu 1542 线段树扫描(面积)

    Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  9. Codeforces Round #430 D. Vitya and Strange Lesson

    Today at the lesson Vitya learned a very interesting function - mex. Mex of a sequence of numbers is ...

  10. Java Servlet 笔记2

    1. Servlet的生命周期 Servlet 通过调用 init () 方法进行初始化. Servlet 调用 service() 方法来处理客户端的请求. Servlet 通过调用 destroy ...