从onhandleintent启动异步任务

时间:2012-11-21 10:19:40

标签: android android-asynctask worker

我们应该从onHandleIntent()的{​​{1}}方法中启动异步任务吗?我看到IntentServiceonHandleIntent()中运行,那么从那里开始worker thread是否安全?

3 个答案:

答案 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的类创建的,并且由于实现很难重构代码。