【问题标题】:Run something in the background with the highest priority possible在后台以最高优先级运行某些东西
【发布时间】:2015-12-01 17:16:45
【问题描述】:

在 Android 中,如何在后台运行具有最高优先级的内容?

我知道我可以使用前台服务,但我不想向用户显示通知。我需要运行 CPU 密集型但寿命短的东西。它需要高效运行(否则它将永远运行),但它只需要几秒钟。

目前我在主线程上运行它,因为这是我可以确保它在我的所有测试设备上在几秒钟内完成的唯一方法。将它作为(非前台)服务运行对于大多数设备来说效果很好,但在某些设备上它需要将近一分钟,这比像现在这样将 UI 锁定 2 秒更不可接受。我也尝试过 AsyncTask,但耗时太长。

【问题讨论】:

  • 您能否发布“在某些设备上需要将近一分钟”的代码?有关服务及其绑定的信息可以在这里找到,developer.android.com/guide/components/services.html
  • 您能否找出为什么在某些设备上需要接近一分钟?与 2 秒相比,一分钟是一个很大的时间。我想原因是它需要一分钟的其他原因,我认为它不会连续获取 CPU 一分钟。知道原因后才能找到解决办法。
  • 在一个单独的进程上运行你的服务怎么样?
  • 您可以尝试在运行中的Thread 上调用setPriority(Thread.MAX_PRIORITY)。这将调整Thread 的优先级。但是,我认为这不会产生影响,因为您的应用程序的进程正在与其他正在运行的进程竞争 CPU 资源,并且调整线程优先级只会使该线程比同一虚拟机中的其他线程更重要。

标签: android multithreading android-service background-thread thread-priority


【解决方案1】:

无法保证某件事会在一定时间内完成,无论您是在 UI 线程还是在后台运行它都没有关系,因为 Android 不是 RTOS

根据您的描述,您必须使用的最匹配的东西是IntentService

【讨论】:

    猜你喜欢
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2014-10-29
    • 2019-04-06
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多