Open3

flutter backgroud処理調べ

Ryo24Ryo24
Ryo24Ryo24
static Future<bool> oneShotAt(
    DateTime time,
    int id,
    Function callback, {
    bool alarmClock = false,
    bool allowWhileIdle = false,
    bool exact = false,
    bool wakeup = false,
    bool rescheduleOnReboot = false,
    Map<String, dynamic> params = const {},
  })

GitHub Corpolate Chat曰く

alarmClockとallowWhileIdleは、AlarmManagerクラスのメソッドのオプションで、アラームを発生させる方法を制御するために使用されます。以下は、両方のオプションの違いです。
アラームの発生方法: alarmClockオプションは、デバイスのアラームクロックを使用してアラームを発生させます。一方、allowWhileIdleオプションは、デバイスがDozeモードに入っている場合でもアラームを発生させるために、一定の条件下でアラームを発生させます。
デバイスの省電力機能への影響: alarmClockオプションは、デバイスの省電力機能であるDozeモードに影響を受けません。一方、allowWhileIdleオプションは、デバイスがDozeモードに入っている場合でもアラームを発生させることができますが、アプリケーションのバックグラウンド処理が制限され、アラームや通知などの一部の処理が遅延されることがあります。
アプリケーションのバッテリー消費: alarmClockオプションは、デバイスのアラームクロックを使用してアラームを発生させるため、アプリケーションのバッテリー消費を抑えることができます。一方、allowWhileIdleオプションは、デバイスがDozeモードに入っている場合でもアラームを発生させるため、アプリケーションがバッテリー消費を抑えるように設計する必要があります。
以上のように、alarmClockオプションとallowWhileIdleオプションは、アラームを発生させる方法やデバイスの省電力機能への影響、アプリケーションのバッテリー消費などの点で異なります。アプリケーションの要件に応じて、適切なオプションを選択する必要があります。

Ryo24Ryo24

パターンA

AndroidAlarmManager.oneShotAt(
      dateTime,
      id,
      callback,
      alarmClock: true, 
      allowWhileIdle: false,
    );

パターンB

AndroidAlarmManager.oneShotAt(
      dateTime,
      id,
      callback,
      alarmClock: false, 
      allowWhileIdle: true,
    );

パターンC

https://github.com/gdelataillade/alarm/blob/68a4ad6b7e1b957e9c40354ddb98b3b3a3c0ea08/lib/src/android_alarm.dart#L77-L91


AとBは30min以上あとのスケジュールはスマホのロックを解除しないと何故か動かない。
Cはalarmパッケージの実装で、動作実績あり。

alarmClockallowWhileIdle の違いがわからぬ。