android中要用任务队列,此事想到了handler。遇事采用了handler.post方法,但是,一直在迷惑,handler.post不一定是在主线程,而是有可能是在子线程中执行,hanlder如果在子线程中创建的,就是子线程。如果主线程就是主线程,如下
主线成开启thread。post方法,在子线程中执行
public class TaskThread extends Thread {
private Handler taskHandler;
private Queue<Runnable> taskQueue = new LinkedList<>();
@Override
public void run() {
Looper.prepare();
taskHandler = new Handler(Looper.myLooper());
Runnable task;
while ((task = taskQueue.poll()) != null) {
taskHandler.post(task);
}
Looper.loop();
}
public void post(Runnable task) {
if (taskHandler == null) {
taskQueue.offer(task);
} else {
taskHandler.post(task);
}
}
}