Android 如何从单独的线程正确调用AsyncTask?

Android 如何从单独的线程正确调用AsyncTask?,android,multithreading,download,android-asynctask,looper,Android,Multithreading,Download,Android Asynctask,Looper,我正在开发一个游戏,在一个单独的线程中运行。现在我需要从网上下载一张图片。我已经为此编写了一个AsyncTask类,但是我不知道如何从我的游戏线程中正确地调用它?事实上,我的AsyncTask正在阻塞,尽管我需要等待映像下载。如果我使用runOnUIThread,它不会阻塞我的线程,而且会走得更远,这根本不适合我。在运行AsyncTask之前,我也尝试过使用Looper.prepare(),但这也有一些问题:Looper.myLooper().quit()似乎不起作用,如果我再次尝试调用Asyn

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

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

简单地说就是这样

hm.sendEmptyMessage(0);

Handler hm = new Handler(){


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

};

谢谢。

如果您的后台线程仍将阻塞,您不需要AsyncTask,可以直接在此线程中加载图像。若要在UI线程上发布,您需要设置带有循环器的
处理程序。一个选项是传递在UI线程中创建的处理程序。另一个选择是将一些上下文传递给后台线程并执行以下操作

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

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

另一个问题是我的游戏包含两个活动:主活动和游戏活动。我正在通过startActivity()启动游戏活动,然后它会启动单独的线程。现在第一个活动无法从游戏活动访问,因此我无法访问在那里创建的处理程序。我应该怎么做?创建一个主活动的静态实例。说公共静态主要活动主要活动;oncreate(){mainactivity=this;}现在使用此实例。getHandler().sendEmptyMessage(0);