我正在做一個應用程序,我想每3分鐘致電一次web服務,當設備沒有超時時,一切工作正常。但是當它超時時,我認爲計時器已經停止工作。計時器在服務不能正常工作android
什麼是解決此問題的替代方法。無論如何我需要3分鐘的時間間隔,並且它不需要使用定時器,我可以使用任何替換Timer的東西。
我正在做一個應用程序,我想每3分鐘致電一次web服務,當設備沒有超時時,一切工作正常。但是當它超時時,我認爲計時器已經停止工作。計時器在服務不能正常工作android
什麼是解決此問題的替代方法。無論如何我需要3分鐘的時間間隔,並且它不需要使用定時器,我可以使用任何替換Timer的東西。
使用RepeatAlarm:
private PendingIntent pendingIntent=null;
static Intent i;
public static AlarmManager manager ;
pendingIntent = PendingIntent.getService(con, 0,
intent, 0);
Calendar cal = Calendar.getInstance();
manager = (AlarmManager) con.getSystemService(Context.ALARM_SERVICE);
manager.setRepeating(AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis(), (3*60*1000),
pendingIntent);
我在做一個應用程序,我想每3分鐘打一次網絡服務,當設備沒有超時時,一切工作正常。但是當它超時時,我認爲計時器已經停止工作。
這並不是一個很好的解決方案。只是看着時鐘滴答滴答,沒有任何記憶的服務。
什麼來解決這個問題
Use AlarmManager
,再加上_WAKEUP
式的報警和either WakefulBroadcastReceiver
或my WakefulIntentService
的另一種方式。
在服務類
private static boolean isRunning = false;
private Timer timer = new Timer();
@Override
public void onCreate() {
super.onCreate();
Log.i("SyncService", "Service Started.");
int interval = 180000;// 3minutes
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
//your process
}
}, 0, (long) interval);
isRunning = true;
}
希望這會給你一些解決方案。
請勿使用具有服務「PendingIntent」的'AlarmManager' _WAKEUP'警報。關於'_WAKEUP'喚醒的唯一保證涉及到我們使用* broadcast *'PendingIntent' - 在這種情況下,'AlarmManager'保證我們將保持足夠長的時間來完成onReceive()。 – CommonsWare