场景:
发布到服务器以在30秒内每隔30秒在后台获取任何新数据,即12小时.位置数据需要与此一起发送.
目前的实施;
服务类;
>位置监听器,间隔为30秒,设置经度和纬度值为两个局部变量
>警报管理器每隔30秒向广播接收器发出等待意图.
>广播接收器在附加内容中启动带有位置变量的IntentService.
> IntentService http发布位置并要求来自服务器的任何新数据.
> IntentService通过广播接收器将服务器响应发送回主服务类.
>服务类starts_sticky以确保操作系统重新启动.
我尝试过几种不同的变化;
>我尝试使用Handler和runnable来处理发布到服务器的计时机制,但是当设备处于睡眠状态时,postDelay时间从2分钟变为7分钟.
>此外,尝试直接从警报管理器触发IntentService,但无法使用最新的位置变量更改PendingIntent附加功能.
问题;
>目前的实施方式是否可行?
>谷歌的GCM路线会更有利吗?
>你如何大力测试服务类,特别是从操作系统中恢复杀死它?
提前致谢.
解决方法:
为避免操作系统终止您的服务,您必须通知用户您的服务是正在进行的服务,如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);
而不是将其设置为时间.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。