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);