leowong87 2022-01-19 15:48 采纳率: 60%
浏览 123
已结题

关于安卓系统回收APP的机制和时机问题

最近刚开始做安卓开发,很多细节不太了解。
我写了一个单页面的MainActivity并绑定service的APP。想尽可能保持与服务器端的TCP长链接并定期发送数据。
跌跌撞撞最后使用了AlarmManager设置RTC_WAKEUP唤醒类型重复广播的方式,在接收到自定义广播的时候进行TCP通信。
程序在干净环境下能够连续几天保持后台活跃并与服务器定时通信。但是由于手机厂商对AlarmManager时间间隔的限制,时间间隔5秒的AlarmManager在不同手机上分别被推迟至1分钟1次至5分钟1次不等。为了在使用阶段进行更高密度的TCP通信就想到了在使用阶段切换为Timer,检测到锁屏后切换成AlarmManager保活+通信。
代码修改完后发现一个问题,APP使用状态下通过Timer进行5秒一次的通信任务正常,通过接收锁屏和解锁广播进行Timer和AlarmManager转换也正常,手机锁屏后仍然可以保持长链接。但是当APP被放至后台并且手机不锁屏大概5分钟后,网络连接断开,发现APP已经被回收。
初步分析原因是因为手机虽然设置长时间不锁屏,但是仍然进入了休眠或者回收机制?而APP由于一直没有收到锁屏广播还仍然在使用Timer,没有切换成AlarmManager进行定期唤醒所以被回收掉了?
还望大家不吝赐教

  • 写回答

8条回答 默认 最新

  • 不会写代码的猴子 Android领域优质创作者 2022-01-19 16:31
    关注
    获得1.20元问题酬金

    Service保活的这个方式已经没法做了,可能有些手机能够保活,但是大多数都会被系统回收;
    之前做推送,发现只有厂商白名单的才能一直保活,所以换成第三方推送了。
    如果要做,可能就要像QQ微信那样,用双service来互相唤醒保活了。但是这个我没测试过。

    评论

报告相同问题?

问题事件

  • 系统已结题 1月27日
  • 创建了问题 1月19日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。