我正在开发一个游戏,即在单独的线程中运行。现在我需要从互联网下载图像。我为此写了一个AsyncTask
类,但我无法弄清楚如何从我的游戏线程中正确调用它。实际上,我的AsyncTask
处于阻止状态,但在下载图像之前需要等待。如果我使用runOnUIThread
,它不会阻止我的线程,并进一步,这根本不适合我。我试过在运行AsyncTask
之前也使用Looper.prepare()
,但是这也有一些麻烦:Looper.myLooper().quit()
似乎没有工作,并且如果我尝试再次拨打AsyncTask
,我得到一个异常告诉我,我试图第二次致电Looper.prepare()
。 我应该如何继续?提前致谢。如何从一个单独的线程正确调用AsyncTask?
1
A
回答
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.
}
};
谢谢。
相关问题
- 1. 线程:从一个单独的线程调用委托(VS2010)
- 2. 如何从另一个AsyncTask调用AsyncTask?
- 3. Android:从一个单独的类文件调用AsyncTask内部类
- 4. 从另一个AsyncTask调用一个AsyncTask
- 5. 安卓:从一个单独的线程
- 6. 从一个单独的线程绘画?
- 7. 如何正确设置AsyncTask以从UI线程分离下载?
- 8. 如何正确创建一个AsyncTask
- 9. AsyncTask和Android线程:如何正确使用它?
- 10. 如何正确使用AsyncTask
- 11. 如何从sockets.io启动一个单独的线程引发的线程
- 12. AsyncTask作为一个单独的类
- 13. C#:调用与[类型] .InvokeMember()在一个单独的线程
- 14. 在一个单独的线程中调用无效时崩溃
- 15. 什么是从UI线程暂停AsyncTask的正确方法
- 16. 是否可以从Servlets调用一个独立的线程?
- 17. 文件在一个单独的线程
- 18. BeginReceive在一个单独的线程
- 19. 如何确定从另一个线程创建哪个线程?
- 20. 如何在单独的线程中调用startActivityForResult()和onResultActivity()?
- 21. 从一个单独的线程调用一个新的表单,并避免冻结形式
- 22. 方法在单独的线程中运行 - 如何调用线程
- 23. Mips编程,如何从一个单独的文件调用函数
- 24. 如何在单独的线程中打开一个窗口?
- 25. Python从单独的线程调用多处理
- 26. 如何从一个单独的应用程序
- 27. 如何正确地多线程独立任务的集合?
- 28. 将android AsyncTask调用转换为单独的类并从所有活动调用
- 29. 从单独的程序调用lex/yacc
- 30. 从一个回调调用PublishProgress(),但从AsyncTask调用
另一个问题是我的游戏包含两项活动:主要活动和游戏活动。我通过startActivity()开始我的游戏活动,然后启动它的单独线程。现在,第一个活动无法从游戏活动访问,所以我无法访问在此处创建的处理程序。我该怎么办? – Egor 2011-06-09 08:19:18
创建主要活动的静态实例。说 公共静态MainActivity mainactivity; oncreate(){ mainactivity = this; } 现在使用这个instance.getHandler()。sendEmptyMessage(0); – 2011-06-09 10:53:10