android真的被玩坏了,android界有一场永远停不下来的攻防战,攻和防都流氓
背景
做为用户,你肯定抱怨过手机上有太多杀不死的应用浪费你的内存,浪费内存就算了,他们还跑你的流量。OK,为了提供更好的用户体验,以MIUI为首的神隐模式(因为我只知道MIUI的叫神隐……就先以他为首吧,有了解谁先出的快告诉我),各个系统厂商都推出自己的XX模式。
在手机息屏后,未加入白名单的应用将会被禁止访问网络。
嗯……这个做的好!用户这回开心了呀:-D。(虽然好像有人抱怨神隐有Bug)。
可是开发者哭了啊,老板一定要让我完成这个需求啊,隔段时间上传或获取个数据呀,你给我断网了我咋办?系统级屏蔽的啊这是,我没法搞了啊……联系运营产品公关还有各种大BOSS!
“我们联系下MIUI官方,把我们默认加白名单行不行?”
“先不说MIUI给不给,除了MIUI还有别家系统啊,而且谁都联系都能加白名单,这模式还有啥用”
“让设计做引导页”
“系统真的是太多了啊……同一个系统不同版本还有差别啊……”
(题外话,话说360电脑版,打开USB调试的引导页真心很屌啊,大部分手机不同型号好像都做了。)
完了,你说怎么办吧?
注:息屏后不能访问网络的实质是,系统休眠后,应用唤醒无法访问网络,所以用轮询执行任务的,是不会出现这种现象的,因为轮询不会让系统休眠,似乎问题解决了是吗?哼哼,你就等着被用户卸载吧,电量哗哗往下掉啊!
所以我们这里讨论的是,使用alarmManager做定时任务的情况
解决思路
方案1
提到息屏后访问不了网络,你第一个想到肯定是系统休眠了,这个简单啊,唤醒不就好了么。PowerManager有个啥属性来着?用这个就可以了!!
额~既然这么简单,那还叫问题吗?
事实是,系统是唤醒了,但是网络就是被中断了,同时被中断的还有GPS,还有什么被禁止的就不清楚了,感兴趣的自己试一下。
方案2
OK,默默的“偷”流量是不行了,我们回归本源想想,问题是息屏后~息屏后~息屏后~诶?同时,leader还提供了一个信息,息屏后收不到推送,但是点亮后,推送都过来了。那我们亮屏了试试?
1 : 时刻关注Log日志,在网络请求失败后,我们手动点亮屏幕。结果是: 请求成功了~原来问题在