文档章节

Android : 如何得到Activities栈顶的Activity名称

欧吧在线
 欧吧在线
发布于 2015/02/28 09:16
字数 556
阅读 36
收藏 0

众所周知,Android中的任务等等都是通过栈来管理的,Activities的管理也不例外。栈这种数据结构是大家再熟悉不过了。它的先进后出特性让Android可以很容易实现从当前Activity回到或者重新启动先前的Activity.(:当系统资源匮乏的时候,系统会释放先前Activity占用资源,因此当从当前Activity返回先前的Activity的时候,先前的Activity会被重新创建)

简单的说,回到先前的Activity本质就是删除当前的Activity,让先前的Activity变成Activities栈的栈顶。可以这么说,当前运行的活动的Activity就是Activities栈顶的那个Activity.

在实际的开发中,我们有时候需要得到当前Activities栈顶Activity,以便实现一些功能,例如Debug的时候用来监测Activity返回的状态是否正确。举例,笔者在开发中由于开发机制的原因,导致在某个Activity UIHome键,然后重新进入应用的时候状态错误。笔者始终检查不到原因,只好在重新进入应用的时候监视当前Activities栈的栈顶Activity,从而得出结论,是开发机制导致Activities栈出现错乱,即栈顶Activity错误导致从home重新进入应用后Android resume了错误的Activity.

以上啰嗦了一堆,读者如果没有兴趣可以跳过。下面我就介绍一下如何获得当前栈顶Activity.

总的步骤是:

1.得到当前运行环境(context)Activity管理器;

2.通过Activity管理器得到当前的任务栈信息;

3.从任务栈中获得栈顶Activity的名称。

具体读者可以参看下面的代码和Android帮助文档。

代码举例 :

String getTopActivity(Activity context)

{

ActivityManager manager = (ActivityManager)context.getSystemService(ACTIVITY_SERVICE) ;

List<RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(1) ;

if(runningTaskInfos != null)

return (runningTaskInfos.get(0).topActivity).toString() ;

else

return null ;

}

最后不要忘记在AndroidManifest.xml中增加权限:

<uses-permission android:name = “android.permission.GET_TASKS”/>

 

 

ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
RunningTaskInfo info = manager.getRunningTasks(1).get(0);
String shortClassName = info.topActivity.getShortClassName(); //类名
String className = info.topActivity.getClassName(); //完整类名
String packageName = info.topActivity.getPackageName(); //包名


本文转载自:

共有 人打赏支持
欧吧在线
粉丝 0
博文 32
码字总数 4007
作品 0
沈阳
Activity的LaunchMode和taskAffinity

做项目到现在都一直没有理解LaunchMode有什么用,或许根本就没真正花心思去看,所以今天把这部分整理下。 设置Activity的LaunchMode属性可以决定这个Activity是和当前Task保持关联,还是说每...

steve.ming
2012/04/26
0
3
【Android】任务和返回栈(tasks and back stack)

tasks and back stack 一个Task 就是一组activity的集合。这些activity按照它们打开的顺序被放置于一个先进后出的栈中(back stack)。 用户点击图标打开一个app时,该app的task会被移到前台...

wilsonchan
2012/11/28
0
4
[Android] Activity的Launch mode详解

Activity有四种加载模式:standard(默认), singleTop, singleTask和 singleInstance。以下逐一举例说明他们的区别: standard:Activity的默认加载方法,即使某个Activity在Task栈中已经存...

枫兮兮
2014/02/27
0
0
Android task和back stack详解一:概述

一个应用往往包含很多activities.每个activity都应围绕着用户可执行的特定动作来设计,并且可以启动其它activitie.例如,一个email应用可能可能有一个显示新邮件列表的activity.当用户选择...

晨曦之光
2012/03/12
0
0
安卓入门笔记之Activity

——本文来自博客园Tekkaman的博客Android之Activity ,IBM的developerWorks网站张勇的详解Android的Activity组件一文 ,CSDN博客hpoi的博客Android Activity的生命周期 ,感谢zzxap在CSDN论...

twobeings
2014/04/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

jetbrains系产品IDEA:mac上面提示快捷键设置

原因 由于Mac上面的Ctrl+空格变成输入法切换的快捷键,在使用IDEA的过程中,代码提示很不方便,需要使用option+/这种传统eclipse上面的代码提示快捷键作为主要快捷键。 怎么修改? 移除【opt...

亚林瓜子
33分钟前
0
0
Exclipse 输出结果时换行

System.out.println(f1 + "\n" + d1 + "\n" + d2);

笑丶笑
34分钟前
1
0
怎样治疗标签不能触发onblur事件

I realize this was over a year ago, but it showed up for me in Google while trying to solve this same issue. It seems Chrome does not consider some elements, like body and ancho......

Weijuer
37分钟前
0
0
vue常见库安装

移动设备上的浏览器默认会在用户点击屏幕大约延迟300毫秒后才会触发点击事件,这是为了检查用户是否在做双击。为了能够立即响应用户的点击事件,才有了FastClick。 安装fastclick npm insta...

林夏夕
39分钟前
0
0
kafka 教程(三) kafka Java API 编程

下午写

MrPei
40分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部