遅延と時間の設定(つまり深夜)と遅延(つまり24時間)の設定以外に、AlarmManager
とScheduledExecutorService
を使用してタスクを定期的に実行する違いは何ですか?AlarmManagerとScheduledExecutorServiceの違い
私の場合、毎晩新しいデータをチェックし、新しいデータがある場合は新しい通知を作成するために少しのコードを実行する必要があります。
ありがとうございます!
遅延と時間の設定(つまり深夜)と遅延(つまり24時間)の設定以外に、AlarmManager
とScheduledExecutorService
を使用してタスクを定期的に実行する違いは何ですか?AlarmManagerとScheduledExecutorServiceの違い
私の場合、毎晩新しいデータをチェックし、新しいデータがある場合は新しい通知を作成するために少しのコードを実行する必要があります。
ありがとうございます!
ScheduledExecutorService
がアプリケーションプロセスで実行されます。アプリケーションプロセスが終了すると、スケジュールされたタスクは実行されません。したがって、Service
の必要性(ライフサイクルのアクティビティを超えてプロセスが活発になる)
AlarmManager
は、常に実行される重要なシステムサービスです。そしてあなたのアプリケーションが何かをスケジュールして殺した場合、AlarmManager
はアプリケーションを(PendingIntent
経由で)再開することがあります。
最後に、ここで言及していない大きな違いは、AlarmManager
が約WakeLock
とパワーマネージメントを知っていることです。これは、AlarmManager
がスケジュールされたタスクを実行するために指定された時刻にAndroidデバイスを起動する可能性があることを意味します。 ScheduledExecutorService
は電力管理について何も知らず、デバイスが深いスリープ状態にない(すなわち、単に時間を逃すことができる)場合にのみタスクを開始する。
私はScheduledExecutorService
があなたのプロセスに縛られていると思うので、あなたのプロセスが殺された場合には動作しません。対照的に、AlarmManager
はOSによって管理されるため、アプリケーションが実行されていなくても機能します。
ScheduledExecutorService
は、常に実行中のコンポーネント(Service
など)がある場合にのみ機能します。したがって、コンポーネントが他の理由でメモリ内にある場合にのみ使用して、ユーザーに価値を追加する必要があります。クロックティックを見るだけでメモリにコンポーネントを保存することは無駄であり、ユーザーがタスクキラーなどで開発者を攻撃する理由の1つです。
AlarmManager
は、OS提供のシステムサービスです。時間がたつとコンポーネントが起動します。したがって、コンポーネントを実行する必要はありません。
私の場合、毎晩新しいデータをチェックし、新しいデータがある場合は新しい通知を作成するために少しのコードを実行する必要があります。
これは、AlarmManager
の明確なシナリオです。
デバイスが深いスリープ状態にあるときには他に何かがありますか?ハンドラ、実行可能スレッドを試しましたが、深いスリープモードでは何も動作しませんでした。 – DAC84