1

私は、サービス開始のため、単純に機能していて、彼を繰り返しますサービスが「すぐに」機能しないのはなぜですか?

mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); 

PendingIntent pIntent = PendingIntent.getService(mContext, 
       SendStatusService.SEND_STATUS_SERVICE_CODE, 
       mIntent, 
       PendingIntent.FLAG_UPDATE_CURRENT); 

mAlarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
       SystemClock.elapsedRealtime() + 2000, 
       mIntervalInMs, 
       pIntent); 

私はマニュアルを理解して:関係なく、デバイス状態のアラームマネージャ(スリープまたはない)が2000ミリ秒を通じてサービスを開始し、間隔mIntervalInMsを繰り返します。

ただし、このコードを実行してから30-50秒後にサービスが開始されます。私が間違っているかどうか、またはドキュメントを理解できないのですか?

+0

あなたのアプリが実行されているAndroidのバージョンは何ですか?また、あなたの 'targetSdkVersion'は何ですか? – CommonsWare

+0

@CommonsWareデバイス:23(アンドロイド6)のターゲットとターゲット:targetSdkVersion 25 – abbath0767

答えて

1

setRepeating()は、APIレベル19+ Android搭載端末で実行した場合、targetSdkVersionが19以上の「不正確」です。したがって、あなたの結果は驚くべきことではありません。イベントは、(Android 6.0のDozeモードが起動するまで)目的の時刻のどこかで発生しますが、目的の時刻に正確に発生することはありません。

+0

hm。私はフラグACTION_IGNORE_BATTERY_OPTIMIZATIONと彼の許可を設定(私のためのアプリ。私は何が悪い知っている=))。どのようにクロックアラームで別のアプリを動作させる?彼らは、ユーザ(およびスマートフォン)をある時に、早くも遅くも目覚めさせない。 – abbath0767

+0

@ abbath0767:「時計アラーム付きの別のアプリはどのように動作しますか?」 - 目覚まし時計アプリケーションは、 'AlarmManager'に対して' setAlarmClock() 'を使用します。詳細については、[この回答](https://stackoverflow.com/a/34699710/115145)を参照してください。 – CommonsWare

関連する問題