2011-06-09 61 views
1

我正在开发一个游戏,即在单独的线程中运行。现在我需要从互联网下载图像。我为此写了一个AsyncTask类,但我无法弄清楚如何从我的游戏线程中正确调用它。实际上,我的AsyncTask处于阻止状态,但在下载图像之前需要等待。如果我使用runOnUIThread,它不会阻止我的线程,并进一步,这根本不适合我。我试过在运行AsyncTask之前也使用Looper.prepare(),但是这也有一些麻烦:Looper.myLooper().quit()似乎没有工作,并且如果我尝试再次拨打AsyncTask,我得到一个异常告诉我,我试图第二次致电Looper.prepare()。 我应该如何继续?提前致谢。如何从一个单独的线程正确调用AsyncTask?

回答

1

如果您的后台线程无论如何都会阻塞,您不需要AsyncTask,并且可以直接在此线程中进行图像加载。之后要在UI线程上发布,您需要设置Handler并设置弯道。一种选择是传递在UI线程中创建的处理程序。另一种选择是一些背景传递给你的后台线程并做

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

如果图像加载过程中需要一些最新进展,你可以使用的AsyncTask并按照上述方法使用创建的处理程序。

1

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

只需调用这样的东西。

hm.sendEmptyMessage(0); 

Handler hm = new Handler(){ 


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

}; 

谢谢。

+0

另一个问题是我的游戏包含两项活动:主要活动和游戏活动。我通过startActivity()开始我的游戏活动,然后启动它的单独线程。现在,第一个活动无法从游戏活动访问,所以我无法访问在此处创建的处理程序。我该怎么办? – Egor 2011-06-09 08:19:18

+0

创建主要活动的静态实例。说 公共静态MainActivity mainactivity; oncreate(){ mainactivity = this; } 现在使用这个instance.getHandler()。sendEmptyMessage(0); – 2011-06-09 10:53:10

相关问题