【发布时间】:2014-10-29 21:24:48
【问题描述】:
我有一个服务在后台线程上做一些繁重的工作。它基本上是下载一个大的 zip (>5MB)、存储、解压缩、解析 XML 并将信息存储在 SQLite 数据库中。
当服务完成它的工作时,我有时必须运行一个快速的后台任务(比如登录用户)。但是,由于服务非常繁忙(通常是提取 zip 文件),我的短任务需要一段时间才能运行(并且用户必须等待)。
有没有一种方法可以完全暂停我的服务(它是后台 AsyncTask),以便我可以运行我的新的更高优先级的任务?
谢谢!
【问题讨论】:
-
您在服务中使用简单线程还是 AsyncTask?请注意,在大多数 Android 操作系统版本中,all AsyncTask 运行在同一线程上,因此如果您在服务中使用 AsyncTask 进行长时间操作,它将阻止所有未来的 AsyncTask。这可能是也可能不是您的问题的根源(需要更多详细信息)。如果不是,另一个建议是降低你的服务线程,附带的好处是它甚至可以提高 UI 响应能力。
-
失败。旨在在用户登录之前下载数据的应用。
-
@Kai 哇,我不知道。我认为每个新的 AsyncTask 都会产生一个新线程。那么如何降低服务中的线程呢?
-
@omegatai 我猜您确实在服务中使用了 AsyncTask,这肯定会阻止您的其他 AsyncTask 操作。您应该更改您的服务代码以使用线程并可选择设置其优先级 (
Thread.setPriority(Thread.NORM_PRIORITY - 1))。如果这对您有用,请告诉我,我会将其更改为答案;) -
@Kai:AsyncTask 的优先级是否会高于优先级为 Thread.NORM_PRIORITY - 1 的线程?顺便问一下,AsyncTask 的优先级是多少?
标签: android android-asynctask android-service android-handler