android 获取栈顶activity,Android : 如何得到Activities栈顶的Activity名称
眾所周知,Android中的任務等等都是通過棧來管理的,Activities的管理也不例外。棧這種數(shù)據(jù)結構是大家再熟悉不過了。它的先進后出特性讓Android可以很容易實現(xiàn)從當前Activity回到或者重新啟動先前的Activity.(注:當系統(tǒng)資源匱乏的時候,系統(tǒng)會釋放先前Activity占用資源,因此當從當前Activity返回先前的Activity的時候,先前的Activity會被重新創(chuàng)建)
簡單的說,回到先前的Activity本質就是刪除當前的Activity,讓先前的Activity變成Activities棧的棧頂。可以這么說,當前運行的活動的Activity就是Activities棧頂?shù)哪莻€Activity.
在實際的開發(fā)中,我們有時候需要得到當前Activities棧頂?shù)腁ctivity,以便實現(xiàn)一些功能,例如Debug的時候用來監(jiān)測Activity返回的狀態(tài)是否正確。舉例,筆者在開發(fā)中由于開發(fā)機制的原因,導致在某個Activity UI按Home鍵,然后重新進入應用的時候狀態(tài)錯誤。筆者始終檢查不到原因,只好在重新進入應用的時候監(jiān)視當前Activities棧的棧頂?shù)腁ctivity,從而得出結論,是開發(fā)機制導致Activities棧出現(xiàn)錯亂,即棧頂Activity錯誤導致從home重新進入應用后Android resume了錯誤的Activity.
以上啰嗦了一堆,讀者如果沒有興趣可以跳過。下面我就介紹一下如何獲得當前棧頂?shù)腁ctivity.
總的步驟是:
1.得到當前運行環(huán)境(context)的Activity管理器;
2.通過Activity管理器得到當前的任務棧信息;
3.從任務棧中獲得棧頂?shù)腁ctivity的名稱。
具體讀者可以參看下面的代碼和Android幫助文檔。
代碼舉例 :
String getTopActivity(Activity context)
{
ActivityManager manager = (ActivityManager)context.getSystemService(ACTIVITY_SERVICE) ;
List runningTaskInfos = manager.getRunningTasks(1) ;
if(runningTaskInfos != null)
return (runningTaskInfos.get(0).topActivity).toString() ;
else
return null ;
}
最后不要忘記在AndroidManifest.xml中增加權限:
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(); //包名
總結
以上是生活随笔為你收集整理的android 获取栈顶activity,Android : 如何得到Activities栈顶的Activity名称的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分别用邻接矩阵和邻接表实现图的深度优先遍
- 下一篇: Android 引用模块中的类,解决An