场景:

发布到服务器以在30秒内每隔30秒在后台获取任何新数据,即12小时.位置数据需要与此一起发送.

目前的实施;

服务类;

>位置监听器,间隔为30秒,设置经度和纬度值为两个局部变量

>警报管理器每隔30秒向广播接收器发出等待意图.

>广播接收器在附加内容中启动带有位置变量的IntentService.

> IntentService http发布位置并要求来自服务器的任何新数据.

> IntentService通过广播接收器将服务器响应发送回主服务类.

>服务类starts_sticky以确保操作系统重新启动.

我尝试过几种不同的变化;

>我尝试使用Handler和runnable来处理发布到服务器的计时机制,但是当设备处于睡眠状态时,postDelay时间从2分钟变为7分钟.

>此外,尝试直接从警报管理器触发IntentService,但无法使用最新的位置变量更改PendingIntent附加功能.

问题;

>目前的实施方式是否可行?

>谷歌的GCM路线会更有利吗?

>你如何大力测试服务类,特别是从操作系统中恢复杀死它?

提前致谢.

解决方法:

我设法使用AlarmManager和WakeLock在后台每2分钟运行一次我的服务,如this answer所述.即使设备处于休眠状态,它每2分钟运行一次.只需将闹钟设置为重复即可

alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+5000, 60000 * ALARM_PERIOD_IN_MINUTES, alarmPendingIntent);

而不是将其设置为时间.

标签:android,background,service,alarmmanager,locationmanager

来源: https://codeday.me/bug/20190709/1410390.html

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐