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(Android 6)和目標:targetSdkVersion 25 – abbath0767

回答

1

setRepeating()在「API Level 19+」Android設備上運行時,「不精確」,而且targetSdkVersion爲19或更高。因此,你的結果並不令人驚訝。這些事件將在所需時間的某個地方發生(直到Android 6.0的打盹模式開始),但它們不會恰好在期望的時間發生。

+0

hm。我有標誌ACTION_IGNORE_BATTERY_OPTIMIZATION和他的權限設置(應用程序只有我,我知道什麼是壞=))。那麼如何用時鐘警報工作的另一個應用程序?他們在某個時間喚醒用戶(和智能手機),不提前一分鐘或之後。 – abbath0767

+0

@ abbath0767:「那麼如何用時鐘警報工作的另一個應用程序?」 - 鬧鐘應用程序將使用'AlarmManager'上的'setAlarmClock()'。有關更多信息,請參見[此答案](https://stackoverflow.com/a/34699710/115145)。 – CommonsWare

相關問題