公司自研Android终端(基于展讯平台),需要在按下物理按键时向服务器发送UDP包做业务,但是,QA经过大量的测试在网络状态相对较好的情况下,依然会存在业务延迟的情况
后面经过和展讯MODEM工程师沟通,这种情况终端MODEM处于休眠状态下,终端首次向基站请求上行传输资源时,终端需要先向基站申请上行调度请求,基站才能分配资源让终端进行上行数据传输。那么如何能让基站能够尽快的分配资源给终端。 有人会说,让MODEM一直处于激活状态不就可以了嘛(心跳包), 让MODEM保持和基站的连接,一直向基站发包,这样的话,终端产品的功耗和流量都是很大的问题。 所以MODEM肯定还是要休眠的。
如何尽量减少这种时延,我们考虑,由于按下终端的物理按键时,终端APP接收到按键的keyevent之后会进行一些非业务的校验,才会向网络上发包。所以我们的想法是在android输入系统的驱动层还未将keyevent分发给应用层之前,开辟一个新的thread向终端软件回调,然后终端软件被回调之后就向服务器发送前导包(非业务包 1kb udp)。 这样,提前激活MODEM并向基站申请上行传输的资源调度请求。