我们应该从onHandleIntent()
的{{1}}方法中启动异步任务吗?我看到IntentService
在onHandleIntent()
中运行,那么从那里开始worker thread
是否安全?
答案 0 :(得分:3)
IntentService
已经是后台进程;没有必要从那里启动AsyncTask。 此外,从任何地方开始它是一个帮助你多线程的助手类。如果您在“活动”中使用它,请确保不要在AsyncTask的AsyncTask
都是'安全'; View
- 方法中操作doInBackground()
。
如果需要在IntentService中生成多个线程,只需使用:
new Thread(Runnable r).start();
请参阅How to run a Runnable thread in Android?
上的示例如果您需要拨打某种回叫,请使用Handler。有关示例,请参阅http://www.vogella.com/articles/AndroidPerformance/article.html#handler
答案 1 :(得分:0)
AsyncTask类用于提供实现多线程的机制,所以你的事件线程不会被挂起,但是当你使用服务时,你不应该在服务中使用AsyncTask,而是你可以使用线程,如果有的话在服务中执行长时间运行的任务。
答案 2 :(得分:0)
如果确实需要在IntentService中使用AsyncTask,可以在AsyncTask中创建一个调用de doInBackGround和onPostExecute的方法。像这样:
void executeFlowOnBackground(Params params) {
onPostExecute(doInBackground(params));
}
在我的情况下,我这样做是因为所有App请求都是由扩展AsyncTask的类创建的,并且由于实现很难重构代码。