我开发了一个应用程序,其目的之一是将文件上传到服务器。平均而言,文件很大,上传需要很多时间,所以为了确保它能够被处理到最后,我将 IO 的关键部分移到了 IntentService 中。每次上传的 IntentService 都会启动一个 AsyncTask 来执行 IO 工作。不幸的是,在后台进行上传时,屏幕滚动会冻结几次。我认为 IntentService+AsyncTask 的组合应该足够了......我会很感激任何关于如何解决它的建议......
问问题
662 次
1 回答
1
我认为您可能在滥用 IntentService。我假设您是AsyncTask.execute(...)
从IntentService.onHandleIntent(Intent)
.
创建 IntentService 是为了在非 UI 线程上一次执行一项后台任务。这意味着它onHandleIntent(Intent)
是从后台线程调用的,不应创建 AsyncTasks。此外,一旦onHandleIntent(Intent)
完成(如果您所做的只是启动 AsyncTask,它会立即执行此操作),该服务将被关闭。
我知道这并不能直接回答您的问题,但它可能会指出问题的原因。请注意,如果您需要能够同时处理多个请求,那么您最好的选择就是扩展 Service 并将工作请求排入 Executor 中onStartCommand(...)
。
[编辑] 有关正确使用的更多信息,IntentService
请查看此内容。
于 2012-07-16T22:25:32.447 回答