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

仿原生安卓文件管理器 仿照安卓原生自带的文件管理器开发,这里只是简单写了个demo,依据现有代码可以很轻松实现后续开发,效果图如下: 首先新建一个listview_item,学过适配器的同学应该都知道一会要这是干什么的,就是为了绘制每个列表项的界面,这里采用图标+文件名 listview_item.xml <LinearLayout xmlns:android="http:/ 阅读详情
  • 向大家发一个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);   
        }   
    }   
}  


Activity 管理器 管理Activity的一个实例 立即下载

相关推荐

Activity生命周期管理

Activity生命周期高效管理工具类

MT管理器笔记二

MT管理器教程笔记二

weixin_46601305的博客 4381

ActivityManager:android活动管理器

活动管理器 android活动管理器

安卓逆向那点事(2)

安卓逆向那点事

weixin_52180702的博客 2753

activityManager

对于app中activity的管理

CCF201803-2 碰撞的小球 python

一些话:已经不知道是第几次做这道题了(大概第三次吧),真的常做常新,每次都有新的细节想法。虽然方法简单粗暴,但好在方便理解,对于我这种菜鸟选手而言。 但在做的过程中,最开始还忽略了输入的小球初始位置有可能是无序的,输出的时候要保持相对位置。CCF真的考验细节,希望上考场时能够认真仔细一点。就酱… #碰撞的小球 #当小球坐标为0或L时,会朝相反方向移动 #当两个小球坐标相等时,会分别转向相反的方向 #计算t秒之后小球的位置 n,L,t = map(int,input().split()) location .

tanya_dre的博客 351

AndroidT(13) --ActivityTaskManagerService 和 ActivityManagerService 的初始化(一)

ATMS在我看来属于AMS的一个辅助类,剥离了AMS中的一些功能到ATMS,下面引用官方的简单说明。

flagstaff's blogs 1709

2023最新版kali安装教程

2023最新版kali安装教程 打开kali官网(https://www.kali.org/),下载kali镜像

qq_46346209的博客 2万+

乐播投屏电视广告逆向分析实录:从Activity追踪到放弃

最近在使用乐播投屏时遇到一个奇怪现象:手机端App播放没有任何广告,但一旦投屏到电视上,就会弹出十几秒甚至一分钟的广告。这个现象引发了我的好奇——既然手机端没广告,那广告逻辑一定在电视端。本文记录了使用MT管理器逆向分析乐播投屏电视版APK的全过程,包括技术思路、关键发现、遇到的坑,以及最终的解决方案。希望能给同样遇到此问题的朋友一些参考。搜索,找到接口定义:smali)V)Z...(共50+个抽象方法)

qq_36710118的博客 901

微调BERT进行中文文本分类任务(Pytorch代码实现)

BERT(Bidirectional Encoder Representation from Transformers)是2018年10月由Google AI研究院提出的一种预训练模型。其模型结构由多层Transformer的Encoder堆叠而成,在大规模语料中进行预训练后,迁移到下游任务,仅进行参数微调训练,就能显著提升性能。本文聚焦于微调中文BERT进行新闻标题分类任务的代码实现。

Iswayzw的博客 1万+

锁定放大器

锁定放大器

qq_46757048的博客 4706

android Activity管理器

管理活动的Activity,可实现将一个activity添加到管理器、得到保存在管理器中的Activity对象、返回管理器的Activity是否为空、关闭所有活动的Activity除了指定的一个之外、移除Activity对象,如果它未结束则结束它、返回管理器中是否包含指定的名字,用于android开发时相当有用,例如我们在开发界面跳转比较频繁、定义android的HOME键、返回键如何跳转页面等项目时非常有用。

razeSpirit的专栏 8952

可微编程:当深度学习遇见物理定律,重塑科学计算新范式

本文探讨了可微编程如何将深度学习与物理定律相结合,重塑科学计算范式。通过自动微分技术,它将物理方程融入可微计算图,使模型在数据驱动的同时遵守物理约束。文章以神经常微分方程为例,阐述了其在连续系统建模、科学模拟器优化等领域的应用,并分析了当前面临的挑战与最佳实践路径。

weixin_29056145的博客 134

Android 安卓栈管理Activity工具以及使用方法

安卓开发中不可缺的,可以在Application初始化的时候建立,也可以创建一个单例来管理,下面是创建了单例模式的类来管理,给出了几个常用的,可以根据自己的业务需求再添加,注释有详细标明!

2401_85730375的博客 728

innovus:NRDB-2276 special net route layer与NanoRouteMode route layer冲突问题解决方法

NanoRouteMode中设置绕线层次2-6,但是被动到的special net有8-11的preferred route layer,这个层次可能是create_route_type+set_ccopt_property -net_type 定义的。二者绕线层次范围有冲突,导致在调整过这条net后再绕线就会提示失败。然后再下route_design 等route命令去绕别的net。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1105

PINN疲劳寿命预测优化

本项目基于物理信息神经网络(PINN)构建材料疲劳寿命预测模型,通过融合Paris裂纹扩展方程与实验数据,实现裂纹扩展行为的精准预测。核心方法包括:1)将Paris方程作为物理约束嵌入神经网络训练;2)生成含噪声的模拟数据并进行归一化处理;3)采用PINN-GA联合优化框架,以裂纹扩展速率最小化为目标优化材料参数。该方案通过物理规律与数据驱动的结合,显著提升预测模型的泛化能力,为工程材料寿命评估提供新思路。

huanghm88的专栏 146

Android中的dumpsys命令详解

dumpsys用户系统诊断,它运行在设备上,并提供系统服务状态信息。6、其他常用服务信息查询。

chuyouyinghe的专栏 921

【FPGA教程案例59】深度学习案例6——基于FPGA的CNN卷积神经网络之整体实现

在课程,我们对的基本原理有了初步认识。在上一个课程,我们完成了CNN的Relu激活层、pool池化层、卷积层以及图像输入层的实现,如下图所示:在本课程中,我们将上述四个模块结合起来,构建一个简单的CNN卷积神经网络。...

FPGA/MATLAB学习教程/源码/项目合作开发 2637

Activity管理器

有些时候我们想要更好的管理Activity,比如随时随地的退出程序,不受返回栈的影响,但系统并没有一个命令就可以关闭所有的Activity。 这个时候我们就要手动的去写一个Activity管理器,代码如下: public class ActivityCollector { // 创建一个Activity的列表 public static List<Activity> a...

冰之沁泠的博客 1285

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android 活动管理器

Android activity 活动管理器 随时随地都能退出程序 新建一个ActivityCollector类作为活动管理器 public class ActivityCollector { public static List<Activity> activities=new ArrayList<>(); public static void addAc...

weixin_44432333的博客 780

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【小王的安卓之路】Android安卓入门之Activity(活动)及其生命周期

- 1.Activity是什么? - 2.Activity的七大生命周期 - 3.Activity的生老病死 - 4.多个Activity交互时生命周期的变化 - 5.Activity的主要作用

小王的学习blog 4万+

android活动管理器,实现activity管理器一次退出所有activity

关于怎么一次退出所有Activity网上有很多很多种说法,比如用杀进程的方式:android.os.Process.killProcess(android.os.Process.myPid());这种方式需要添加权限android.permission.KILL_BACKGROUND_PROCESSES;或者用System.exit(0);退出。另外一种方法是用ActivityManager的re...

weixin_35519039的博客 219

android activity管理,android Activity管理器

/*** @ClassName: ActivityTaskManager* @Description: TODO(Activity管理器)* @author lhn* @date 2016-4-15 上午10:34:10*/public class ActivityTaskManager {// 创建ActivityTaskManagerprivate static ActivityTaskMan...

weixin_42512276的博客 518

Android任务管理器

最近参考系统源代码,做了一个任务管理器。具体功能是获取用户的任务列表、活动图标、Activity的缩略图以及恢复任务、关闭任务。 首先声明,任务管理器基本上的功能都会要求系统级权限。即你手中需要有系统签名文件。 以下代码在4.4.2及5.1.1系统上亲测可用。 一、获取任务列表 获取任务列表需要系统使用系统UIDandroid:sharedUserId="android.uid.s

小小程序猿 4117

Android中Activity管理器(记录)

/** * Activity活动管理器 */ public class ActivityManager { public static List&lt;Activity&gt; activityList = new ArrayList&lt;&gt;(); /** * 添加一个活动 * @param activity */ publ...

lpCrazyBoy的博客 1372
上一篇: Android Activity管理之Activity栈
下一篇: Acitivity 跳转是否Destroy()问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值