1. 程式人生 > >Android : 如何得到Activities棧頂的Activity名稱

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

本質就是刪除當前的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(); //包名