Android 暂停后台线程上运行的任务以运行更高优先级的任务
我有一个在后台线程上做一些繁重工作的服务。它基本上下载一个大的zip(>5MB),存储它,解压它,解析XML并将信息存储在SQLite数据库中 当服务完成它的工作时,我有时不得不运行一个快速的后台任务(比如登录用户)。但是,由于服务非常繁忙(通常提取zip文件),我的短任务需要一段时间才能运行(用户必须等待) 有没有办法完全暂停我的服务(以及它的后台异步任务),以便运行新的更高优先级的任务 谢谢 根据这一点:Android 暂停后台线程上运行的任务以运行更高优先级的任务,android,android-asynctask,android-service,android-handler,Android,Android Asynctask,Android Service,Android Handler,我有一个在后台线程上做一些繁重工作的服务。它基本上下载一个大的zip(>5MB),存储它,解压它,解析XML并将信息存储在SQLite数据库中 当服务完成它的工作时,我有时不得不运行一个快速的后台任务(比如登录用户)。但是,由于服务非常繁忙(通常提取zip文件),我的短任务需要一段时间才能运行(用户必须等待) 有没有办法完全暂停我的服务(以及它的后台异步任务),以便运行新的更高优先级的任务 谢谢 根据这一点: 为什么不试试简单的java线程而不是使用AsyncTask呢。你也可以尝试给予它更大
为什么不试试简单的java线程而不是使用AsyncTask呢。你也可以尝试给予它更大的优先权,但在我看来,优先权并不那么有效 您在服务中使用简单线程还是异步任务?请注意,在大多数Android OS版本上,所有AsyncTask都在同一线程上运行,因此如果在服务中使用AsyncTask进行长时间操作,它将阻止所有未来的AsyncTask。这可能是问题的根源,也可能不是问题的根源(需要更详细的信息)。如果不是这样,另一个建议是降低服务线程,其附带好处是它甚至可以提高UI响应能力。失败。设计用于在用户登录之前下载数据的应用程序。@Kai哇,我不知道。我认为每一个新的异步任务都会产生一个新线程。那么,我如何降低我服务中的线程?@omegatai我猜您在服务中使用了AsyncTask,这肯定会阻止其他AsyncTask操作。您应该将服务代码更改为使用线程,并可以选择设置其优先级(
thread.setPriority(thread.NORM\u priority-1)
)。如果这对您有效,请告诉我,我会将其转换为答案;)@Kai:异步任务的优先级会比优先级为thread.NORM\u priority-1的线程高吗?顺便问一下,异步任务的优先级是什么?在Android中直接使用Java线程不是一个好的做法,因为开发人员应该手动处理回调,以及应该在后台做什么,这会导致大量的模板代码。另一方面,使用Asynctasks也可以创建后台线程,而无需任何麻烦,并在Prexecute doInBackground On PostExecute等上重写其方法。。。帮助您拥有更清晰的代码并有效地管理回调。