如何得到Activities栈顶的Activity名称

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

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

在实际的开发中,我们有时候需要得到当前Activities栈顶的Activity, 以便实现一些功能,例如Debug的时候用来监测Activity返回的状态是否正确。举例,笔者在开发中由于开发机制的原因,导致在某个Activity UI按Home键,然后重新进入应用的时候状态错误。笔者始终检查不到原因,只好在重新进入应用的时候监视当前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(); //包名

Author : Aoyousatuo Zhao

http://blog.sina.com.cn/aoyousatuo

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值