[英]Call a method every x minutes
當前,我有一個可以發送通知的應用程序,我希望該應用程序能夠每隔x分鍾自動發送這些通知(例如,默認為15分鍾)。 發送此通知時,該應用程序當前可能正在運行或可能未運行。
經過一番閱讀后,我確定這里將使用AlarmManager,但是我不知道如何從中調用方法。 我已經有了通知代碼,我只需要一種每x分鍾調用一次的方法。
我對此很陌生,這是我的第一個練習應用程序(在C#中有經驗,但是在Java中卻很少)。
謝謝大衛。
您可能要考慮這樣的事情:
Intent intent = new Intent(this, MyService.class);
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0);
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
// Start every 30 seconds
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent);
如果你不清楚,經過本教程
編寫一個IntentService
。 在其中,只需啟動一個新的Thread
。 在Thread.run()
,放入一個無限的while循環來調用您的通知代碼,然后將Thread.sleep(15 * 60 * 1000)
....
如果AlarmManager.RTC
指定的時間間隔計划任務,請不要使用帶有方法alarm.setRepeating(...)
標志AlarmManager.RTC
和AlarmManager.RTC_WAKEUP
。 因為在這種情況下,警報將限制在設備的實時時鍾上。 因此,更改系統時間可能會導致警報異常。 您必須使用標志AlarmManager.ELAPSED_REALTIME
或AlarmManager.ELAPSED_REALTIME_WAKEUP
。 在這種情況下, SystemClock.elapsedRealtime()
將用作安排警報的基礎。
代碼如下所示:
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + checkIntervalMillis, checkIntervalMillis, pendingIntent);
如果您希望設備在睡眠模式下執行長時間運行的任務,我建議使用CommonsWare的WakefulIntentService庫: https : //github.com/commonsguy/cwac-wakeful
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.