https://imagelol.com/image/6rIf5
前段时间发现微信后台活动极其频繁,电池耗电太大,于是每次用过后都会去强制上滑关闭.
昨天有那么一两次没有上滑关闭,竟然后台运行了 3 个多小时,前台也就用了 2 个小时.
微信是怎么做到的? 早就关闭了后台刷新.
iPhone11,iOS13.4
1
Lin0936 2020-04-17 11:17:24 +08:00
background push?
|
2
opengps 2020-04-17 11:20:32 +08:00
凡是 im 工具都有实时性要求。因此就必然会设法保活,通过长连接或者密集的短连接心跳来尽可能实时的检测是否有新消息,属于打开了就进坑不关闭的那种,他的计时也就分分秒秒都在消耗运行时长
|
4
0312birdzhang 2020-04-17 11:26:08 +08:00
最近我也发现了,貌似是从 13.4 开始的。现在不强杀进程根本压不住。
|
5
kera0a 2020-04-17 11:32:41 +08:00 via iPhone
其他的各种方式拉起 app 后运行时间都很短,拉起了也是冻结状态。
微信从前台回到后台时,可以申请个后台任务,系统会动态分配几分钟时间后台执行这个任务,之后 app 才会被冻结。 频繁打开微信,那微信就基本就一直在后台了 |
6
opengps 2020-04-17 11:34:13 +08:00
@chitanda 虽然我不懂 ios,但是我可以根据我个人的 socekt 开发经验来说:依赖第三方的推送(这里指系统推送),实时性怕是远远不如自己进程内部的长连接或者密集短链接轮训更有效果
|
7
TangMonk 2020-04-17 11:37:56 +08:00 via iPhone
@kera0a background task 好像是 iOS13 才有的吧, 请教下 iOS 之前用的是什么方式实现后天运行的?
|
11
daozhihun 2020-04-17 11:46:50 +08:00 via Android
你把微信放在后台后,系统会给一定的后台时间的。我猜是因为你频繁在打开微信,所以加起来时间就长了。别的 app 你不会用的这么频繁
|
12
lizhuoli 2020-04-17 12:38:42 +08:00 via iPhone
@TangMonk iOS 13 只是把原来多种后台的策略,包括后台刷新,后台任务(最大 5 分钟),后台定位音频 VoIP,这些概念统一到一起,提供了一个新的 BackgroundTasks.framework,目前没有新增功能,只是优化 API 而已,写起来舒服点
|
13
lizhuoli 2020-04-17 12:40:58 +08:00 via iPhone
@lizhuoli 原来的 API 其实设计很烂,属于那种短平快,依赖一个 Int 标记定位 task,还必须手动取消,大项目很容易坑的设计。现在基于一个抽象对象,有各种生命周期回调和通知,终于可以说是一个正常人设计的 API 了
|
14
kojirou 2020-04-17 14:18:23 +08:00
微信后台占那么多消息接受也没见快啊
|
15
BradZhou 2020-04-17 14:23:28 +08:00
看更新就知道 国产 app 更新都是 200m 起步的 其它 app 基本都几十 m 就够了 没见安分守己过
|
16
chitanda OP |
17
clrss 2020-04-17 15:00:12 +08:00
iOS 一直允许 3 分钟后台(不需要开启后台刷新).
正常 App 是干完活就停. 比如加载网页时切出去看看, 浏览器继续后台加载, 加载完就停. 国产流氓么: 有 3 分钟就用满 3 分钟. |