我们是否应该从onHandleIntent()
方法IntentService
开始异步任务?我读在worker thread
运行,所以从那里开始asyncTask
可以安全吗?从onhandleintent启动异步任务
回答
IntentService
s已经是后台进程;没有必要从那里启动一个AsyncTask。 另外,从任何地方开始它是帮助你多线程的辅助类。如果您在活动中使用它,请确保您不要在您的AsyncTask的AsyncTask
是'安全'的;doInBackground()
-method中操纵View
。
如果你需要生成你的IntentService内多个线程,只需使用:
新的Thread(Runnable的R)。开始();
看到How to run a Runnable thread in Android?
一个例子,如果你需要调用某种回调,使用Handler。有关示例,请参阅http://www.vogella.com/articles/AndroidPerformance/article.html#handler
AsyncTask类用于提供一种机制来实现多线程,因此您的事件线程不会被绞死,但是在您使用服务时,您不应该使用服务中的AsyncTask,而是您可以使用线程,如果某些长时间运行的任务要执行,则在Service中。
如果您确实需要在IntentService中使用AsyncTask,则可以在AsyncTask中创建一个方法,该方法调用de doInBackGround和onPostExecute。事情是这样的:
void executeFlowOnBackground(Params params) {
onPostExecute(doInBackground(params));
}
在我来说,我这样做是因为所有App请求中通过扩展的AsyncTask类制成,并且由于执行的是难度重构代码。
我纠正了错字。请确保不要在下次发生这样的错字... –
- 1. 异步任务服务未启动
- 2. 通过Spring启动异步任务TaskScheduler
- 3. 异步任务从api的异步任务不运行异步
- 4. 从服务和异步任务启动PopupWindow
- 5. 试图从一个异步任务启动一个片段
- 6. 异步任务
- 7. 异步任务
- 8. 异步任务
- 9. 异步任务vs任务
- 10. 切换异步任务同步任务
- 11. android异步任务
- 12. 块异步任务
- 13. 异步任务,BufferedReader
- 14. SignalR异步任务
- 15. PHP异步任务
- 16. 与异步任务
- 17. 异步任务异常Android
- 18. 异步任务正在运行时重启活动
- 19. 如果发送邮件的异步任务后启动意向
- 20. 春季启动时在数据库中执行任务异步
- 21. 尝试启动两个异步任务的问题。
- 22. 启动多个异步任务并处理它们(C#)
- 23. Android:在OnReceive方法中启动异步任务
- 24. 如何取消在C#中启动进程的异步任务?
- 25. 其他方式以异步方式启动任务
- 26. 最好的方式来并行启动几个异步任务?
- 27. C#启动任务运行异步方法
- 28. 在Android上启动多个异步任务
- 29. 异步任务VS异步无效
- 30. 与Spring启动异步服务
开始一个'AsyncTask'从任何地方都不安全:http://stackoverflow.com/questions/4187960/asynctask-and-looper-prepare-error - 它只打算从主线程启动,可能工作如果你在'onHandleIntent'里面启动它,因为它有一个Looper – zapl
如果我在onHandleIntent()里面不使用asyncTask?它里面的代码仍然会在后台运行? – Rookie
@zapl,感谢您的评论。 Raghav:只需调用你想要调用的方法;因为IntentService在不同的线程中运行,所以您的UI不会冻结。如果出于任何原因想要在IntentService中产生多个线程,只需使用新线程(Runnable r).start();看例子在http://stackoverflow.com/questions/1921514/how-to-run-a-runnable-thread-in-android – Reinier