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)
方法中下载文件。它在所有设备和各种操作系统中都能正常工作。