1

我正在开发一个游戏,它在一个单独的线程中运行。现在我需要从 Internet 下载图像。我为此编写了一个AsyncTask类,但我不知道如何从我的游戏线程中正确调用它?事实上,我AsyncTask正在阻止,尽管我需要在下载图像之前等待。如果我使用runOnUIThread,它不会阻塞我的线程并走得更远,这根本不适合我。我也试过Looper.prepare()在运行之前使用AsyncTask,但这也有一些麻烦:Looper.myLooper().quit()似乎没有工作,如果我再次尝试调用AsyncTask,我会收到一个异常,告诉我我正在尝试调用Looper.prepare()第二个时间。我应该如何进行?提前致谢。

4

2 回答 2

1

如果您的游戏线程不是您的主线程,也就是说,如果它不是 UI 线程,则从您的游戏线程调用处理程序。现在从这个处理程序调用你的异步任务。

简单地调用这样的东西。

hm.sendEmptyMessage(0);

Handler hm = new Handler(){


public void handleMessage(Message msg)
{
//call async task.
}

};

谢谢。

于 2011-06-09T06:51:07.363 回答
1

如果您的后台线程无论如何都会阻塞,则您不需要 AsyncTask 并且可以直接在此线程中进行图像加载。之后要在 UI 线程上发布,您需要Handler设置 looper。一种选择是传递在 UI 线程中创建的处理程序。其他选择是将一些上下文传递给您的后台线程并执行

Handler h = new Handler(context.getMainLooper());

如果您在图像加载期间需要一些进度更新,您可以使用 AsyncTask 并使用如上所述创建的处理程序。

于 2011-06-09T06:51:33.077 回答