android 后台推送,通过 alarmmanager WAKEUP 每分钟发 1 个心跳, adb shell dumpsys alarm 显示被系统改成 15 分钟一个了...

2015-03-11 22:01:25 +08:00
 gamexg

后台推送心跳包应该怎么做?尝试了2天,最好的成绩是通过

manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+t,
                pendingIntent);

正常工作了1个小时,然后就被系统把每分钟一个的延时改成了15分钟一次...

实在是想不出来好办法了...

12576 次点击
所在节点    Android
5 条回复
zgxltxz
2015-03-12 09:17:35 +08:00
If your application has strong ordering requirements there are other APIs that you can use to get the necessary behavior; see setWindow(int, long, long, PendingIntent) and setExact(int, long, PendingIntent).

https://developer.android.com/reference/android/app/AlarmManager.html#set(int
gamexg
2015-03-12 14:28:30 +08:00
@zgxltxz setExact android 4.4以上版本才有。

我试一下改成服务端发心跳试试。
zgxltxz
2015-03-12 14:51:08 +08:00
@gamexg 可以试试Service加定时器的方式,然后用Alarm定时检查Service是否正常运行
gamexg
2015-03-12 18:59:56 +08:00
@zgxltxz android alarmmanager WAKEUP 是我知道的的唯一一个可以在CPU关闭后还能唤醒手机执行程序的方式。

除此之外就只有持有唤醒锁强制 CPU 不关闭了。

另一个待机唤醒的方式是网络数据到达,也会唤醒 CPU 处理,这需要由服务端发起,但是如果由于意外状况导致长连接断开,这个唤醒方式会失效。
zgxltxz
2015-03-12 19:47:01 +08:00
@gamexg 这样,用判断目标机器API Level,低于4.4用老办法,高于等于用新方法。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/176198

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX