【问题标题】:Scheduled tasks in foreground service not running as per schedule when android app goes into background当android应用程序进入后台时,前台服务中的计划任务未按计划运行
【发布时间】:2019-05-12 02:10:34
【问题描述】:

我有一个反应原生应用程序,它调用我编写的原生 android 模块。该原生模块在前台启动服务,向用户显示通知。我这样做是因为我希望我的服务即使在应用程序进入后台或手机上的屏幕显示关闭时也能运行。在我的服务中,我正在使用 ScheduledExecutorService 安排 2 个任务。下面是我的 Service 类中 onStartCommand 的代码。

“runScanTask”计划在 0 秒开始,之后每 13 秒运行一次。 “stopScanTask”计划在 8 秒后启动,之后每 13 秒运行一次。当我的屏幕显示打开时,这非常有效。但是,当我关闭显示器时,作业要么完全停止运行,要么以完全随机的间隔运行。有没有办法让它们在显示器关闭时也能正常工作?

final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();

ScheduledFuture<?> startScanFuture = scheduler.scheduleAtFixedRate(runScanTask, 0, 13, TimeUnit.SECONDS);
ScheduledFuture<?> stopScanFuture = scheduler.scheduleAtFixedRate(stopScanTask, 8, 13, TimeUnit.SECONDS);

Runnable stopScanTask = new Runnable() {
   public void run() {
      Log.d("main", "STOP BLE SCAN");
   }
};

Runnable runScanTask = new Runnable() {
   public void run() {
      Log.d("main", "RUN BLE SCAN");
   }
};

【问题讨论】:

    标签: android scheduled-tasks background-service foreground-service


    【解决方案1】:

    当您的屏幕关闭时,您的设备会进入打盹模式,同时 CPU 不执行任何操作。执行以下解决方案之一:

    1- 在您的服务的 onCreate 上获取部分唤醒锁定,但这对电池不利。

    2- 使用 AlarmManager 的 setAndAllowWhileIdlesetExactAndAllowWhileIdle 。 (深度打瞌睡时任务之间的最短时间间隔为 9 分钟)

    3- WorkManager(任务之间的最短时间间隔为 15 分钟)

    4- JobScheduler(任务之间的最短时间间隔为 15 分钟)

    5-Android-Job库。

    看到这个article描述了你面临的困境。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多