Android : 如何得到Activities棧頂的Activity名稱
Android : 如何得到Activities棧頂的Activity名稱
Author : Aoyousatuo Zhao
http://blog.sina.com.cn/aoyousatuo
眾所周知,Android中的任務等等都是通過棧來管理的,Activities的管理也不例外。棧這種資料結構是大家再熟悉不過了。它的先進後出特性讓Android可以很容易實現從當前Activity回到或者重新啟動先前的Activity.(注:當系統資源匱乏的時候,系統會釋放先前Activity佔用資源,因此當從當前Activity返回先前的Activity的時候,先前的Activity會被重新建立)
簡單的說,回到先前的Activity
在實際的開發中,我們有時候需要得到當前Activities棧頂的Activity,
以便實現一些功能,例如Debug的時候用來監測Activity返回的狀態是否正確。舉例,筆者在開發中由於開發機制的原因,導致在某個Activity UI按Home鍵,然後重新進入應用的時候狀態錯誤。筆者始終檢查不到原因,只好在重新進入應用的時候監視當前Activities棧的棧頂的Activity,從而得出結論,是開發機制導致Activities
以上囉嗦了一堆,讀者如果沒有興趣可以跳過。下面我就介紹一下如何獲得當前棧頂的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(); //包名