我正在开发一个在单独的线程中运行的游戏。现在我需要从Internet下载图像。我为此编写了一个AsyncTask
类,但我无法弄清楚如何从我的游戏线程中正确调用它?事实上,我的AsyncTask
正在阻止,但我需要在下载图像之前等待。如果我使用runOnUIThread
,它不会阻止我的线程并且更进一步,这根本不适合我。我在尝试运行Looper.prepare()
之前也试过使用AsyncTask
,但这也有一些麻烦:Looper.myLooper().quit()
似乎没有用,如果我试图调用AsyncTask
再一次,我得到一个例外,告诉我我第二次打电话给Looper.prepare()
。
我该怎么办?提前谢谢。
答案 0 :(得分:1)
如果您的游戏线程不是您的主线程,如果它不是UI线程,则从您的游戏线程调用处理程序。现在从这个处理程序调用你的异步任务。
只需调用类似的东西。
hm.sendEmptyMessage(0);
Handler hm = new Handler(){
public void handleMessage(Message msg)
{
//call async task.
}
};
感谢。
答案 1 :(得分:1)
如果您的后台线程无论如何都会阻塞,您不需要AsyncTask并且可以直接在此线程中进行图像加载。要在UI线程上发布,您需要设置Handler
设置looper。一种选择是传递在UI线程中创建的处理程序。其他选项是将一些上下文传递给后台线程并执行
Handler h = new Handler(context.getMainLooper());
如果在图像加载过程中需要一些进度更新,可以使用AsyncTask并使用按照描述创建的处理程序。