2

サービスで毎晩02:00にタスクを実行する必要があります。タスクに失敗した場合は、30分後に再開するようにスケジュールしますが、成功した場合は、サービスを停止して、別の夜の02:00に再開します。なんとか02:00に開始しましたが、トリガーされた後は継続的にトリガーされます。

私のコードはにServiceあり、コード自体は次のとおりです。

@Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);

        //doTasks();

        MediaPlayer player = MediaPlayer.create(this,
                Settings.System.DEFAULT_NOTIFICATION_URI);
        player.start();

        AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
        alarmManager.cancel(pendingIntent);
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 2);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY, pendingIntent);
    }

doTasks()実行する必要のあるタスクですが、遅いため、テスト目的で通知音を使用します。そしてpendingIntentはこれService自体です。

AlarmManager私の引き金を絶えず作るのは何のアイデアですか?

4

1 に答える 1

2

pendingIntentを開始するように設定されている場合、基本的に、メソッドServiceで毎回新しいアラームを繰り返し作成しています。onStart(...)

AlarmManagerデバイスがトリガーされるべきときにスリープしていた場合、アラームを「遅く」トリガーするメカニズムがあります。あなたの場合、常にアラームを再作成するためAlarmManager、時刻が 02:00:00 を過ぎていてもすぐにトリガーする必要があると常に考えています。

が起動するたびに常に再作成されるのを防ぐために、別の場所にアラームを作成しServiceます。

于 2012-12-02T00:14:59.470 に答える