测试机是android5.0.2系统,我采用的是AlarmManager的方法进行轮询,轮询的方法如下:
public static void startPollingService(Context context, long seconds, Class<?> cls,String action) {
//获取AlarmManager系统服务
AlarmManager manager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
//包装需要执行Service的Intent
Intent intent = new Intent(context, cls);
intent.setAction(action);
PendingIntent pendingIntent = PendingIntent.getService(context, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
//触发服务的起始时间
long triggerAtTime = SystemClock.elapsedRealtime();
// long triggerAtTime = System.currentTimeMillis();
//使用AlarmManger的setRepeating方法设置定期执行的时间间隔(seconds秒)和需要执行的Service
manager.setRepeating(AlarmManager.ELAPSED_REALTIME, triggerAtTime,
seconds * 100, pendingIntent);
}
//停止轮询服务
public static void stopPollingService(Context context, Class<?> cls,String action) {
AlarmManager manager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, cls);
intent.setAction(action);
PendingIntent pendingIntent = PendingIntent.getService(context, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
//取消正在执行的服务
manager.cancel(pendingIntent);
}
在android4.1.2和android4.4的机子上测试没有问题。
如果android5.0.2插上USB,这个轮询方法也能正常执行。但是如果拔掉USB,轮询方法将会每4分钟左右才执行,无论我设置的是多少分钟。
调试了3天没找到答案,为了项目进度,后来采用Timer+timertask进行完成轮询操作。
这个问题在这里先记录一下。如果有知道答案的请告诉我一下,感激不尽。