1

10 分ごとにバックグラウンドでデータベース アクションを実行したいと考えています。最良の方法は何ですか?

多分:

  • スレッド:どうやって?
  • サービス:非常に複雑ですか?
  • AsyncTasks:期間が長すぎます

私の現在のアプローチ:

CountDownTimer clearDBsCountDownTimer = new CountDownTimer(600000, 600000) {
    @Override
    public void onFinish() {
        ClearDBs();
    }
};

private void ClearDBs() {
    // Clearing databases here
    clearDBsCountDownTimer.start();
}

ClearDBs()しかし、それは機能していません:メソッドが終了するのを待っているからだと思いますCountDownTimerよね?

しかし、それを正しく行う方法: 何かアイデアはありますか?

4

2 に答える 2

2

AlarmManager + IntentService は最もクリーンなアプローチです。

AlarmManager を使用すると、定期的な IntentService をスケジュールできます。

IntentService は、バックグラウンド スレッド (onHandleIntent()呼び出し) で特定のアクションを実行して終了するサービスです。

バックグラウンドで定期的なジョブを実行するのに最適な組み合わせです。

たとえば、この投稿を確認してください。

この種の操作には注意してください。バッテリーが消耗する可能性があるためです (ユーザーが怒ってしまいます)。

@Squonk で提案されているように、setRepeating(...)またはsetInexactRepeating(...)定期的なイベントをスケジュールするために使用できます。

アプリがフォアグラウンドにあるときにのみこのバックグラウンド タスクを実行する場合でも、manager.cancel()を呼び出すイベントをキャンセルできます。

于 2013-04-05T21:41:46.363 に答える
2

バインドされたサービスを作成することをお勧めします。

スレッド化にはScheduledExecutorServiceを使用します

于 2013-04-05T22:03:37.673 に答える