情景:
发布到服务器,每30秒长时间(即12小时)在后台获取任何新数据。位置数据需要与此一起发送。
当前实施;
服务类;
IntentService通过广播接收器将服务器响应发送回主服务类。
我尝试过几种不同的变体;
我尝试使用Handler和runnable来处理发布到服务器的计时机制,但是当设备处于睡眠状态时,postDelay时间从2分钟变为7分钟。
此外,尝试直接从警报管理器触发IntentService,但无法使用最新的位置变量更改PendingIntent附加内容。
问题;
目前的实施方式是否可行?
谷歌的GCM路线会更有利吗?
您如何大力测试服务类,尤其是从操作系统中恢复而杀死它?
提前致谢。
答案 0 :(得分:1)
为避免操作系统终止您的服务,您必须通知用户您的服务是正在进行的服务,如http://developer.android.com/guide/components/services.html#Foreground中所述。
我设法使用AlarmManager和WakeLock在后台每2分钟运行一次我的服务,如this answer中所述。即使设备处于睡眠状态,它也会每2分钟运行一次。只需将闹钟设置为重复,如
alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+5000, 60000 * ALARM_PERIOD_IN_MINUTES, alarmPendingIntent);
而不是将其设置为时间。