gpt4 book ai didi

Android:定期(每 30 秒)在后台发送位置数据并向服务器请求新数据

转载 作者:太空宇宙 更新时间:2023-11-03 10:49:35 25 4
gpt4 key购买 nike

场景:

在很长一段时间内(即 12 小时)每 30 秒向服务器发送一次以在后台获取任何新数据。位置数据需要与此一起发送。

当前实现;

服务等级;

  1. 位置监听器,间隔 30 秒,将经度和纬度值设置为两个局部变量
  2. 警报管理器每 30 秒向广播接收器触发一次未决 Intent。
  3. 广播接收器在 extras 中启动一个带有位置变量的 IntentService。
  4. IntentService http 发布位置并从服务器请求任何新数据。
  5. IntentService 通过广播接收器将服务器响应发送回主服务类。

    • 服务类 starts_sticky 以确保操作系统重新启动。

我尝试了几种不同的变体;

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

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

问题;

  1. 当前的实现是否可行?

  2. 沿用 google 的 GCM 路线会不会更有好处?

  3. 您如何积极测试服务类,尤其是关于从杀死它的操作系统中恢复的服务类?

提前致谢。

最佳答案

为避免操作系统终止您的服务,您必须通知用户您的服务是一项持续服务,如 http://developer.android.com/guide/components/services.html#Foreground 中所述。 .

我设法让我的服务在后台使用 AlarmManager 和 WakeLock 每 2 分钟运行一次,如 this answer 中所述.即使设备处于 sleep 状态,它也会每 2 分钟运行一次。只需将闹钟设置为像

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

而不是将其设置为时间。

关于Android:定期(每 30 秒)在后台发送位置数据并向服务器请求新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15903877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com