我想启动多个线程,从网络中检索数据,使用它执行某些操作,然后更改有关此数据的UI。
我正在使用执行者服务
executorService = Executors.newFixedThreadPool(3);
获取所有数据,但是当我尝试调用imageView.post时,它返回true但是没有执行关于Runnable的主体:
Log.v("imageloader", "before post + " + imageView);
imageView.post(new Runnable()
{
@Override
public void run()
{
Log.v("imageloader", "in post - " + bmpToShow.toString() + "/" + imageView);
if (imageView.getTag().equals(url))
{
imageView.setImageBitmap(bmpToShow);
}
}
});
如果在日志中的执行程序服务中执行10个Runnables,你可以找到10个“发布之前”消息,但只有nTasks(取决于你在“Executors.newFixedThreadPool(nTasks)”中“允许的任务数”)“post”消息< / p>
我无法弄清楚nTasks如何与view.post运行次数连接。
PS。它只发生在应用程序的第一次启动时(我使用安卓片段并在onCreateView中填充数据)
答案 0 :(得分:2)
答案 1 :(得分:1)
post
仅表示Runnable已成功放入队列,而不是运行正常。
你怎么知道“Runnable的主体没有执行”?
一种可能性是bmpToShow
为空,在这种情况下,您的日志语句可能会抛出NullPointerException
(不确定日志如何在Android上运行)如果您没有捕获它们会丢失它
您可以添加另一个日志,以便在您输入runnable Log.v("in runnable with " + bmpToShow);
时首先检查。
如果bmpToShow
为空,可能是由于多种原因,但如果没有看到其余的代码则很难判断。