创建低优先级Android服务

时间:2014-03-03 05:41:10

标签: android

令人惊讶的是,互联网上没有人需要创建低优先级的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,本示例中未对其进行说明。是否有必要将服务置于低优先级,或者这只是开发人员使事情变得复杂,还有另一种方法可以确保服务的优先级低吗?

2 个答案:

答案 0 :(得分:3)

对于您的用例,重要的是处理您使用Process.THREAD_PRIORITY_BACKGROUND创建的线程中的信息。您还可以在另一个名为Thread.setPriority的线程中处理事物。 (见the docs on Thread

用于向另一个线程发送命令的android约定使用HandlerLooper,但您不需要使用这些来确保低优先级。 Handler为您提供了一个约定,用于将消息一次一个地发送到要处理的线程。它还提供了一些约定,用于发布在一段时间后运行或在一段时间后运行的项目。 Handler与Looper相关联,负责将消息分派给处理程序。

答案 1 :(得分:3)

我尝试了很多不同的方法,但这段代码片段帮助我完成了同样的过程。

android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);