簡體   English   中英

每x分鍾調用一次方法

[英]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.RTCAlarmManager.RTC_WAKEUP 因為在這種情況下,警報將限制在設備的實時時鍾上。 因此,更改系統時間可能會導致警報異常。 您必須使用標志AlarmManager.ELAPSED_REALTIMEAlarmManager.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM