【发布时间】:2014-04-14 14:07:49
【问题描述】:
我有一个优先级设置为Thread.MIN_PRIORITY + 1 的线程,它为我进行一些图像处理(调整大小、读取和写入)。
我注意到,每当该线程处理图像时,我的 UI 线程中的动画就会开始卡顿和冻结。
优先级足够低,因此动画应该比该线程具有更高的优先级,而且我的 CPU 肯定不会缺乏资源。
发生这种情况有什么特别的原因吗?
编辑 - 我的线程:
public class WorkerQueue extends Thread {
public Handler handler;
int priority = Thread.MIN_PRIORITY + 1;
private static WorkerQueue self = null;
public static WorkerQueue getInstance() {
if (self == null) {
self = new WorkerQueue();
self.start();
self.setPriority(priority);
}
return self;
}
@Override
public void run() {
Looper.prepare();
handler = new Handler();
handler.getLooper().getThread().setPriority(priority);
Looper.loop();
}
public synchronized void enqueueTask(final Worker task) {
handler.post(new Runnable() {
@Override
public void run() {
task.run();
}
});
}
}
【问题讨论】:
-
我建议您阅读这篇文章,而不是回答您的问题 - developer.android.com/training/displaying-bitmaps/index.html
-
我已经通读了它,由于我的任务运行时间很长,我决定使用我自己的 looper 线程而不是 asyncTask。除此之外,我的代码与那里给出的示例非常相似。
标签: java android multithreading performance ui-thread