默认

一种Android端IM智能心跳算法的设计与实现探讨(含样例代码)

查看数: 175132 | 评论数: 11 | 收藏 15
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-04-18 10:22

正文摘要:

1、前言 对于IM或实时消息推送技术来说,客户端的心跳算法几乎是必备品(TCP协议也需要心跳?详见此文《为什么说基于TCP的移动端IM仍然需要心跳保活?》),尤其当前复杂的移动网络环境下,网络心跳保活算法的优劣 ...

评论

椎锋陷陈 发表于 2 年前
引用:JackJiang 发表于 2021-09-06 12:39
你自已验证过,这么干是真的有效果是吧
引用:标准 AlarmManager 闹钟(包括 setExact() 和 setWindow())推迟到下一个维护期。

    如果您需要设置在设备处于低电耗模式时触发的闹钟,请使用 setAndAllowWhileIdle() 或 setExactAndAllowWhileIdle()。
    使用 setAlarmClock() 设置的闹钟将继续正常触发,系统会在这些闹钟触发之前不久退出低电耗模式。


以上引自Android开发者官网的针对低电耗模式和应用待机模式进行优化,我自己也有在部分机型上验证过可行,但因为会出现上个评论说的那个“应用频繁唤醒系统耗电过多“的提示,所以并没有实际运用到生产环境上。
JackJiang 发表于 2 年前
引用:椎锋陷陈 发表于 2021-09-06 11:05
关于最后的“对齐唤醒”我再补充一下:
Android 6.0引入了低电耗模式与应用待机模式,并于Android 7.0加强 ...

你自已验证过,这么干是真的有效果是吧
椎锋陷陈 发表于 2 年前
关于最后的“对齐唤醒”我再补充一下:
Android 6.0引入了低电耗模式与应用待机模式,并于Android 7.0加强了低电耗模式,去除了设备需要保持静止一段时间才能进入该模式的条件。
在这两种模式下,当设备处于未充电、息屏的状态下时,所有网络访问都会被阻止、所有Alarm操作都会被延迟。
系统会定期退出低电耗模式进入维护期,让应用重新完成被延迟的操作,但随着设备保持未充电、息屏的状态越来越久,维护期的间隔也会越来越长。
AlarmManager有提供应对这种模式的API,即使在这种模式下Alarm操作也能正常触发。
但是国内手机厂商大部分有“对其唤醒”的机制,即会把多个Alarm操作强制对齐到同一时间点再统一执行。
由于这种机制的存在,在低电耗模式与应用待机模式下,很难做到在精确的时间点执行任务,因此对我们的心跳策略的实现影响很大。
要做到也并非没有办法,可以使用setAlarmClock()去设置Alarm操作。
但是调用这个API触发Alarm操作后会退出低电耗模式,相当于与系统对着干,不少设备会提醒说你的应用频繁唤醒系统耗电过多。
除非你的应用用户粘度很高,否则大概率用户可能出于省电的原因卸载掉你的应用。
starsea 发表于 4 年前
这个牛逼
JackJiang 发表于 5 年前
引用:ming06007 发表于 2018-10-24 09:46
正在做心跳方面的处理,借鉴一下

ming06007 发表于 5 年前
正在做心跳方面的处理,借鉴一下
dusuijiang 发表于 6 年前
学习中
JackJiang 发表于 7 年前
引用:fanfu 发表于 2017-05-16 09:53
在做及时通讯。有没有安卓端心跳总是不明白。发送返回,三次握手。感觉自己学的都没法用啊。。还是不熟练惹 ...

到技术专辑里系统地看看资料:http://www.52im.net/forum.php?mod=collection&op=all
fanfu 发表于 7 年前
在做及时通讯。有没有安卓端心跳总是不明白。发送返回,三次握手。感觉自己学的都没法用啊。。还是不熟练惹的祸。
什么狗屁云 发表于 7 年前
挺有想法的,先收藏
IMDeveloper 发表于 7 年前
移动网络下的心跳算法是挺烦的,文章不错,有借鉴意义

返回顶部