2013-08-05 58 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; 
} 

希望这会给你一些解决方案。