【发布时间】:2013-07-17 11:04:26
【问题描述】:
我有一个扩展 HandlerThread 的 MyThread,我需要在 MyThread 类中将 runnables 发布到它的队列中。
我知道如何做到这一点的唯一方法是调用
h = new MyHandler(Looper.myLooper());
然后h.post(r) 发布 Runnable r。
但我不确定在哪里放置新的 MyHandler() 行,因为需要先启动线程才能获得 looper。还有另一个类启动 MyThread 并向其发布可运行文件,但现在我也需要在类中执行此操作。有什么想法吗?
已编辑:
class MyThread extends HandlerThread {
private MyHandler h;
private Runnable r;
MyThread(String name, int priority) {
super(name, priority);
//h = new MyHandler();
r = new MyRunnable();
}
@Override
public void start() {
super.start();
//h = new MyHandler();
}
class MyRunnable implements Runnable {
@Override
public void run() {
//...
}
}
void startCount(long delay) {
h.postDelayed(r, delay);
}
}
两条注释行产生相同的结果:r 在主线程中执行,而不是在我想要实现的这个 HandlerThread 中执行。
【问题讨论】:
-
我知道每次我想发布可运行文件时都调用
new MyHandler(Looper.myLooper()).post(r);可以正常工作,但是有没有更好的方法呢?