activty栈管理
题外话:我们有时在开发中,通常会有如下的需求:屏幕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代码:
- 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);
- }
- }
- }
复制代码
Stack<Activity>这个就是我们自定义的activity栈,这个写好后,我们就开始一步一步的来实现我们要跳转的界面了。用了这个Stack<Activity>就给我们节省很多的资源和时间,有了这个我们页就不用那么麻烦了
从上面的代码我们知道了在每个方法的下面都会用到判断,这个是非常主要的,因为当我们判断完事了,才可以执行下面的代码,就像是我们要跳转界面一样,我们这个跳转的话,是必须你同意才能跳转的,如果没有判断的话,当你到达这个界面的时候,就不会停止在这个界面,而是再跳到下一个界面,这样就会出现bug。所以大家一定要记住这个。
activty栈管理的更多相关文章
- Activity 生命周期及其栈管理方式
Activity 生命周期 Android 系统用栈的形式管理 Activity , 当新的 Activity 被创建是, 会被放置到栈顶, 这个 Activity 会进入到运行状态, 而前一个 Ac ...
- 安全退出app,activoty栈管理
前言 由于一个同学问到我如何按照一个流程走好之后回到首页,我以前看到过4个解决方案,后来发现有做个记录和总结的必要,就写了这篇博文.(之前看小强也写过一篇,这里通过自身的分析完整的总结一下以下6种方案 ...
- ActivityJump+ActivityManager【Activity之间的跳转和Activity任务栈管理】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装Activity跳转的方法以及实现Activity任务栈管理. 效果图 代码分析 ActivityJump:封装Activi ...
- Android解析ActivityManagerService(二)ActivityTask和Activity栈管理
前言 关于AMS,原计划是只写一篇文章来介绍,但是AMS功能繁多,一篇文章的篇幅远远不够.这一篇我们接着来学习与AMS相关的ActivityTask和Activity栈管理. 1.ActivitySt ...
- activity之栈管理
在android中.一个activity组件能够激活还有一个activity组件:本程序activity和其他程序的activity. 若新的被激活的activity组件属于还有一个应用程序, ...
- activity的启动模式和栈管理
在学习Android的过程中,Intent是我们最常用Android用于进程内或进程间通信的机制,其底层的通信是以Binder机制实现的,在物理层则是通过共享内存的方式实现的. Intent ...
- android的activity栈管理
在进行BlackBerry程序开发的时候,BlackBerry提供了一个管理Screen的栈,用来从任何地方来关闭位于最上一层的Screen,使用UiApplication.getUiApplicat ...
- 06 获取Activity的栈管理器
代码 <span style="font-size:18px;">package com.fmy.day8_29task.util; import java.util. ...
- ActivityManagerService数据结构Activity栈管理(二)
ActivityManagerService要管理四大组件,那四大组件就必须在AMS中有存在的形式,这里先从AMS 如何管理Activity 谈起: Activity在AMS 中存在的形式为Activ ...
随机推荐
- pymysql实现从a表过滤出有效信息添加至b表
# Author: yeshengbao # -- coding: utf-8 -- # @Time : 2018/4/16 19:23 import pymysql # 创建连接 conn = py ...
- “百度杯”CTF比赛 九月场_SQL
题目在i春秋ctf大本营 题目一开始就提醒我们是注入,查看源码还给出了查询语句 输入测试语句发现服务器端做了过滤,一些语句被过滤了 试了一下/**/.+都不行,后来才发现可以用<>绕过 接 ...
- spring mvc中的注解说明
注解扫描 context:component-scan 包扫描 <context:component-scan base-package="org.bdp"> < ...
- 百度URL 部分参数
[Baidu URL的部分参数] 1.Baidu Form表单如下: 2.部分参数解析 wd 查询关键字,就是你要搜索的内容. bs 上一次搜索的词或者内容: rn 搜索结果页每页显示的数目,默认 ...
- pytorch 移动端框架 thnets 附c示例代码
前年年前做一个手机移动端图像识别项目的时候, 先后尝试了mxnet,thnets,caffe,tensorflow. 当时的情况是,mxnet内存管理奇差,内存经常由于模型运算分配不足,app挂掉. ...
- [Codeforces 864A]Fair Game
Description Petya and Vasya decided to play a game. They have n cards (n is an even number). A singl ...
- UpdateAfterEvent
10月3日,在杭州市西湖景区,一只小松鼠不停地接受一道道食物,花生.玉米.饼干,可谓来者不拒,憨态可掬的模样吸引了众多围观者...Description 小松鼠打了10个小时的游戏,一脸满足.却发 ...
- ●BZOJ 4559 [JLoi2016]成绩比较(容斥)
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4559 题解: 容斥,拉格朗日插值法. 结合网上的另一种方法,以及插值法,可以把本题做到 O( ...
- ubuntu linux c学习笔记----共享内存(shmget,shmat,shmdt,shmctl)
shmget int shmget(key_t key, size_t size, int flag); key: 标识符的规则 size:共享存储段的字节数 flag:读写的权限 返回值:成功返回共 ...
- button点击切换,获取按钮ID
<!DOCTYPE html> <html> <head lang="zh-CN"> <meta charset="UTF-8& ...