2013-08-05 92 views
0

我正在做一個應用程序,我想每3分鐘致電一次web服務,當設備沒有超時時,一切工作正常。但是當它超時時,我認爲計時器已經停止工作。計時器在服務不能正常工作android

什麼是解決此問題的替代方法。無論如何我需要3分鐘的時間間隔,並且它不需要使用定時器,我可以使用任何替換Timer的東西。

回答

1

使用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); 
+0

請勿使用具有服務「PendingIntent」的'AlarmManager' _WAKEUP'警報。關於'_WAKEUP'喚醒的唯一保證涉及到我們使用* broadcast *'PendingIntent' - 在這種情況下,'AlarmManager'保證我們將保持足夠長的時間來完成onReceive()。 – CommonsWare

1

我在做一個應用程序,我想每3分鐘打一次網絡服務,當設備沒有超時時,一切工作正常。但是當它超時時,我認爲計時器已經停止工作。

這並不是一個很好的解決方案。只是看着時鐘滴答滴答,沒有任何記憶的服務。

什麼來解決這個問題

Use AlarmManager,再加上_WAKEUP式的報警和either WakefulBroadcastReceivermy WakefulIntentService的另一種方式。

1

在服務類

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; 
} 

希望這會給你一些解決方案。