2011-07-02 19 views
12

遅延と時間の設定(つまり深夜)と遅延(つまり24時間)の設定以外に、AlarmManagerScheduledExecutorServiceを使用してタスクを定期的に実行する違いは何ですか?AlarmManagerとScheduledExecutorServiceの違い

私の場合、毎晩新しいデータをチェックし、新しいデータがある場合は新しい通知を作成するために少しのコードを実行する必要があります。

ありがとうございます!

答えて

33

ScheduledExecutorServiceがアプリケーションプロセスで実行されます。アプリケーションプロセスが終了すると、スケジュールされたタスクは実行されません。したがって、Serviceの必要性(ライフサイクルのアクティビティを超えてプロセスが活発になる)

AlarmManagerは、常に実行される重要なシステムサービスです。そしてあなたのアプリケーションが何かをスケジュールして殺した場合、AlarmManagerはアプリケーションを(PendingIntent経由で)再開することがあります。

最後に、ここで言及していない大きな違いは、AlarmManagerが約WakeLockとパワーマネージメントを知っていることです。これは、AlarmManagerがスケジュールされたタスクを実行するために指定された時刻にAndroidデバイスを起動する可能性があることを意味します。 ScheduledExecutorServiceは電力管理について何も知らず、デバイスが深いスリープ状態にない(すなわち、単に時間を逃すことができる)場合にのみタスクを開始する。

+0

デバイスが深いスリープ状態にあるときには他に何かがありますか?ハンドラ、実行可能スレッドを試しましたが、深いスリープモードでは何も動作しませんでした。 – DAC84

5

私はScheduledExecutorServiceがあなたのプロセスに縛られていると思うので、あなたのプロセスが殺された場合には動作しません。対照的に、AlarmManagerはOSによって管理されるため、アプリケーションが実行されていなくても機能します。

10

ScheduledExecutorServiceは、常に実行中のコンポーネント(Serviceなど)がある場合にのみ機能します。したがって、コンポーネントが他の理由でメモリ内にある場合にのみ使用して、ユーザーに価値を追加する必要があります。クロックティックを見るだけでメモリにコンポーネントを保存することは無駄であり、ユーザーがタスクキラーなどで開発者を攻撃する理由の1つです。

AlarmManagerは、OS提供のシステムサービスです。時間がたつとコンポーネントが起動します。したがって、コンポーネントを実行する必要はありません。

私の場合、毎晩新しいデータをチェックし、新しいデータがある場合は新しい通知を作成するために少しのコードを実行する必要があります。

これは、AlarmManagerの明確なシナリオです。

関連する問題