我正在做AOP工具,我想記錄線程生成關係,比如誰啓動了一個新的異步任務,所以我想在父線程調用android.os.AsyncTask.execute之前獲取AsyncTask的線程名稱。在AOP的建議之前,我可以獲取AsyncTask對象,但看起來像asnctask類不提供公共方法來獲取線程名稱和線程ID。有沒有辦法在執行之前獲得asynctask的線程名稱和線程ID ?如何在執行之前獲取AsyncTask的線程名稱?
與線程的啓動方法不同,在啓動線程之前,我可以通過調用線程對象的Thread.getName()和Thread.getId()來獲得線程的名稱和ID。
============ UPDATE ==============
我已經找到一個解決辦法,呼籲android.os.AsyncTask.execute前,將asyncTask obj ref及其當前線程名稱(asynctask的父線程)保存爲映射的鍵值。然後在asyncTask的doInBackground()過程中,調用Thread.currentThread()。getName()來獲取當前asynctask的線程名稱,並使用這個asynctask obj ref作爲鍵來查詢上面的映射,然後我們可以得到父代的線程名線。所以我們可以得到世代關係。
從我的應用程序日誌看來,數字並不總是增加,有些在asynctask終止後重用。 – bettermanlu