gpt4 book ai didi

java - 如何在执行之前获取 AsyncTask 的线程名称?

转载 作者:太空狗 更新时间:2023-10-29 14:16:47 25 4
gpt4 key购买 nike

我在做AOP instrument,我想记录线程生成关系,比如谁开始了一个新的异步任务,所以我想在父线程调用android.os.AsyncTask之前获取AsyncTask的线程名称.execute. 在AOP 之前的建议中,我可以获得AsyncTask 对象,但看起来asnctask 类没有提供获取线程名称和线程ID 的公共(public)方法。有什么方法可以在执行之前获取异步任务的线程名称和线程ID?

与线程的启动方法不同,在启动线程之前,我可以通过线程对象调用Thread.getName() 和Thread.getId() 来获取线程的名称和ID。

============更新==============
我找到了一个解决方法,在调用 android.os.AsyncTask.execute 之前,将 asyncTask obj ref 及其当前线程名称(asynctask 的父线程)作为键值保存到映射中。然后在asyncTask的doInBackground()中,调用Thread.currentThread().getName()得到当前asynctask的线程名,以this asynctask obj ref为key查询上面的map,就可以得到父线程的线程名线。这样我们就可以得到生成关系。

最佳答案

这是来自 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 #”开头,然后是您启动​​它的次数;

关于java - 如何在执行之前获取 AsyncTask 的线程名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21130482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com