android 获取栈顶activity,Android : 如何得到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 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名称的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分别用邻接矩阵和邻接表实现图的深度优先遍
- 下一篇: docker $PWD路径_Docker