命名AsyncTask的线程

26

在Java中,我们可以为普通的Thread设置线程名字,那么是否可以给AsyncTask的后台线程命名呢?

Thread(Runnable target, String name) 

我看过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正在访问帮助类中的方法。


3
你的意思是不能扩展吗?你必须扩展AsyncTask才能使用它。为什么不直接扩展默认构造函数,并添加一个私有成员"名称",并在构造函数中设置它呢? - Maggie
2个回答

60
尝试从doInBackground()内部调用此方法:
Thread.currentThread().setName("some custom name");

-6

为什么你不能扩展AsyncTask,我不明白。

我用调试器扩展了我的AsyncTask数千次,以便知道哪个AsyncTask出了问题。

public class MyAsyncTask extends AsyncTask<Void, Void, Void>{
}

像这样


2
如果我想扩展这个类,我必须实现doInBackground方法,那么名称呢?这不是在默认构造函数中。 - Dayerman
然后创建您的MyAsyncTask构造函数。当您创建AysncTask时,使用new MyAsyncTask(String name)来初始化您的asyncTask。我仍然不明白您所说的AsyncTask名称是什么意思。 - Terence Lui
2
我的意思是在类中添加一个参数,它是异步任务的名称。就像我问题中的第一个评论所说的那样。我的想法是在创建新线程时添加名称 "AsyncTask #" + mCount.getAndIncrement() + name); 例如。 - Dayerman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接