我开发了一个应用程序,其目的之一是将文件上传到服务器。平均而言,文件非常大,上传需要花费很多时间,因此为了确保将其处理到最后,我将IO的关键部分移到了IntentService中。从每个上传的IntentService中,都有一个启动了IO作业的AsyncTask。不幸的是屏幕滚动在后台上传时冻结了几次。我认为IntentService + AsyncTask的组合应该是足够的... 我会很感激任何建议如何解决它..服务中的繁重操作异步任务冻结屏幕
回答
我想你可能会滥用IntentService。我假设你从IntentService.onHandleIntent(Intent)
呼叫AsyncTask.execute(...)
。
IntentService被创建为在非UI线程上一次执行一个后台任务。这意味着onHandleIntent(Intent)
从后台线程调用,不应该创建AsyncTasks。此外,一旦onHandleIntent(Intent)
完成(如果你所做的只是启动一个AsyncTask,它立即执行),该服务就是关闭的候选对象。
我知道这并不直接回答你的问题,但它可能指向问题的原因。 请注意,如果您需要能够同时处理多个请求,那么您最好的办法就是扩展Service并将工作请求排入onStartCommand(...)
的Executor。
[编辑]有关正确使用IntentService
的更多信息,请查看this。
感谢您的回答,我从他们那里得到的是,以下解决方案应该适合完成文件上传任务 http://vmix.googlecode.com/svn/trunk/android/VmixSDK/src/com/vmix/android /vmixsdk/rds/FileUploadService.java – basta 2012-07-17 07:38:35
这是一个好的开始,但很少有理由在Android(或任何Java 5或更高版本)中创建自己的Thread对象。管理你自己的线程可能是有风险的,特别是对于较新的程序员。例如,Thread.stop()方法已被弃用,实际上并没有做你想做的事情。你应该考虑这种工作类型的Executor框架(http://developer.android.com/reference/java/util/concurrent/Executor.html)。它不仅提供了卓越的线程管理,而且还保证了大多数人不理解的与线程安全相关的某些事情。 – zienkikk 2012-07-17 14:18:11
- 1. 异步任务冻结UI
- 2. iOS异步任务冻结
- 3. 对话框冻结异步任务android
- 4. ProgressDialog冻结在异步任务
- 5. Android异步任务完全冻结UI
- 6. 异步任务被冻结UI
- 7. 异步任务没有更新屏幕
- 8. WP7/Silverlight中的异步操作/任务
- 9. 如何在Android服务中异步任务网络操作?
- 10. Windows服务中的异步操作
- 11. 执行繁重的任务时加载屏幕
- 12. 等待异步任务操作完成,并继续当前的异步任务
- 13. 队列异步任务操作?
- 14. 处理异步服务器端操作
- 15. 异步服务操作:无阻断
- 16. 在PCL服务参考设置中禁用基于任务的异步操作
- 17. 显示加载的UI冻结异步任务像这样
- 18. Android异步任务重用
- 19. 任务冻结GUI
- 20. 异步操作vs异步网络任务?
- 21. 异步任务从api的异步任务不运行异步
- 22. 异步任务vs任务
- 23. 异步任务中的getInputStream任务
- 24. 在Java中的异步任务中实现繁忙等待
- 25. Android服务/异步任务/线程
- 26. 异步任务与RIA服务
- 27. 异步任务服务未启动
- 28. 飞溅屏幕上的Android异步任务
- 29. 执行异步任务时刷卡冻结
- 30. UI冻结/尝试使用任务/异步等待
想要发表一些代码吗?特别是'IntentService'和'AsyncTask'?你是否正在UIThread('onPostExecute','onPreExecute'和'onProgressUpdate')上运行的任何'AsyncTask'方法中做任何工作? – 2012-07-16 22:05:55
只需检查一下,您是否正在使用AsyncTask执行doInBackground中的所有重处理? – 2012-07-16 22:08:34