Android 从onhandleintent启动异步任务

Android 从onhandleintent启动异步任务,android,android-asynctask,worker,Android,Android Asynctask,Worker,我们应该从IntentService的onHandleIntent()方法中启动异步任务吗?我读到onHandleIntent()运行在工作线程中因此从那里启动异步任务安全吗???IntentService已经是后台进程了;没有必要从那里开始异步任务。此外,从任何地方启动AsyncTask都是“安全的”;它是一个帮助程序类,可以帮助您进行多线程处理。如果在活动中使用AsyncTask的doInBackground()-方法,请确保不要操纵该方法中的视图 如果需要在IntentService中生成

我们应该从
IntentService
onHandleIntent()方法中启动异步任务吗?我读到
onHandleIntent()
运行在
工作线程中
因此从那里启动
异步任务
安全吗???

IntentService
已经是后台进程了;没有必要从那里开始异步任务。此外,从任何地方启动
AsyncTask
都是“安全的”;它是一个帮助程序类,可以帮助您进行多线程处理。如果在活动中使用AsyncTask的
doInBackground()
-方法,请确保不要操纵该方法中的
视图

如果需要在IntentService中生成多个线程,只需使用:

新线程(Runnable r.start()

参见上的示例


如果需要调用某种回调,请使用。例如,请参见

AsyncTask类用于提供实现多线程的机制,因此事件线程不会挂起,但在使用服务时,不应在服务中使用AsyncTask,而是可以使用线程,如果要执行长时间运行的任务,在服务中。

如果确实需要在IntentService中使用AsyncTask,可以在AsyncTask中创建一个调用de doInBackGround和onPostExecute的方法。大概是这样的:

void executeFlowOnBackground(Params params) {
  onPostExecute(doInBackground(params));
}

在我的例子中,我这样做是因为所有应用程序请求都是由一个扩展了AsyncTask的类发出的,并且因为实现很难重构代码。

从任何地方启动
AsyncTask
都不安全:-它只打算从主线程启动,如果您在
onHandleIntent
中启动它,可能会起作用,因为它有一个循环,如果我在onHandleIntent()中不使用asyncTask,会怎么样?里面的代码还会在后台运行吗?@zapl,谢谢你的评论。Raghav:只需调用您想要调用的方法;当IntentService在不同的线程中运行时,您的UI不会冻结。如果出于任何原因希望在IntentService中生成多个线程,只需使用新线程(Runnable r).start();参见@Rookie,是的,AFAIK的例子,我使用一种方法直接在
onHandleIntent(Intent-Intent)
方法中下载文件。它在所有设备和各种操作系统中都能正常工作。