我正在做一个应用程序,我想每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