我正在做AOP工具,我想记录线程生成关系,比如谁开始一个新的异步任务,所以我想在父线程调用 android.os.AsyncTask之前获取AsyncTask的线程名称.execute。在AOP之前的建议中,我可以获得AsyncTask对象,但看起来asnctask类没有提供公共方法来获取线程名称和线程ID。有没有办法在执行之前获取asynctask的线程名称和线程ID ?
与thread的start方法不同,在启动一个线程之前,我可以通过使用线程对象调用Thread.getName()和Thread.getId()来获取线程的名称和id。
============的更新 ==============
我找到了一个解决方法,在调用android.os.AsyncTask.execute之前,将asyncTask obj ref及其当前线程名称(asynctask的父线程)保存为映射的键值。然后在asyncTask的doInBackground()中,调用Thread.currentThread()。getName()来获取当前asynctask的线程名,并使用this asynctask obj ref作为查询上述map的键,然后我们就可以得到父级的线程名线。所以我们可以得到生成关系。
答案 0 :(得分:1)
这是来自AsyncTask类的代码:
private static final ThreadFactory sThreadFactory = new ThreadFactory() {
private final AtomicInteger mCount = new AtomicInteger(1);
public Thread newThread(Runnable r) {
return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());
}
};
正如您所见,线程名称始终以“AsyncTask#”开头,然后是您启动它的次数;
答案 1 :(得分:0)
我不熟悉API,但您可以使用around
建议,保存当前线程proceed(..)
,然后您可以在返回的线程上调用getName()
。