我开发了一个应用程序,其目标之一是将文件上传到服务器。平均而言,文件非常大并且上传需要花费大量时间,因此为了确保将其处理到最后,我将IO的关键部分移至IntentService。从每次上传的IntentService开始,都会启动一个执行IO作业的AsyncTask。不幸的是,屏幕滚动在后台上传时会多次冻结。我认为IntentService + AsyncTask的组合应该足够...... 我很感激有任何建议如何解决它..
答案 0 :(得分:1)
我认为你可能会误用IntentService。我假设您从AsyncTask.execute(...)
致电IntentService.onHandleIntent(Intent)
。
创建IntentService是为了在非UI线程上一次执行一个后台任务。这意味着从后台线程调用onHandleIntent(Intent)
,不应该创建AsyncTasks。此外,一旦onHandleIntent(Intent)
完成(如果您所做的只是启动AsyncTask,它会立即执行),该服务是被关闭的候选者。
我知道这不会直接回答您的问题,但可能会指出问题的原因。
请注意,如果您需要能够同时处理多个请求,那么最好的办法就是扩展服务并将工作请求排入onStartCommand(...)
的执行者。
[编辑]有关正确使用IntentService
支票this的更多信息。