Service Async Task中的繁重操作会冻结屏幕

时间:2012-07-16 22:04:49

标签: android service upload android-asynctask

我开发了一个应用程序,其目标之一是将文件上传到服务器。平均而言,文件非常大并且上传需要花费大量时间,因此为了确保将其处理到最后,我将IO的关键部分移至IntentService。从每次上传的IntentService开始,都会启动一个执行IO作业的AsyncTask。不幸的是,屏幕滚动在后台上传时会多次冻结。我认为IntentService + AsyncTask的组合应该足够...... 我很感激有任何建议如何解决它..

1 个答案:

答案 0 :(得分:1)

我认为你可能会误用IntentService。我假设您从AsyncTask.execute(...)致电IntentService.onHandleIntent(Intent)

创建IntentService是为了在非UI线程上一次执行一个后台任务。这意味着从后台线程调用onHandleIntent(Intent),不应该创建AsyncTasks。此外,一旦onHandleIntent(Intent)完成(如果您所做的只是启动AsyncTask,它会立即执行),该服务是被关闭的候选者。

我知道这不会直接回答您的问题,但可能会指出问题的原因。 请注意,如果您需要能够同时处理多个请求,那么最好的办法就是扩展服务并将工作请求排入onStartCommand(...)的执行者。

[编辑]有关正确使用IntentService支票this的更多信息。