令人惊讶的是,互联网上没有人需要创建低优先级的Android服务,但我确实如此。该服务有时可能需要进行一些密集的CPU或数据库工作,因此我希望它具有尽可能低的优先级。如果它有任何区别,我需要服务一次从数据库读取条目(可能是几千),然后遍历列表并添加和减去一些值。尽可能创造最低的CPU负载非常重要,我不在乎它是否在1秒或10秒内完成。
Android dev文档提供了这样的示例:
@Override
public void onCreate() {
// Start up the thread running the service. Note that we create a
// separate thread because the service normally runs in the process's
// main thread, which we don't want to block. We also make it
// background priority so CPU-intensive work will not disrupt our UI.
HandlerThread thread = new HandlerThread("ServiceStartArguments",
Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
// Get the HandlerThread's Looper and use it for our Handler
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper);
}
完整示例(http://developer.android.com/guide/components/services.html)涉及服务处理程序和looper,本示例中未对其进行说明。是否有必要将服务置于低优先级,或者这只是开发人员使事情变得复杂,还有另一种方法可以确保服务的优先级低吗?
答案 0 :(得分:3)
对于您的用例,重要的是处理您使用Process.THREAD_PRIORITY_BACKGROUND创建的线程中的信息。您还可以在另一个名为Thread.setPriority
的线程中处理事物。 (见the docs on Thread)
用于向另一个线程发送命令的android约定使用Handler和Looper,但您不需要使用这些来确保低优先级。 Handler为您提供了一个约定,用于将消息一次一个地发送到要处理的线程。它还提供了一些约定,用于发布在一段时间后运行或在一段时间后运行的项目。 Handler与Looper相关联,负责将消息分派给处理程序。
答案 1 :(得分:3)
我尝试了很多不同的方法,但这段代码片段帮助我完成了同样的过程。
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);