请问微信是如何做到后台活动时间超过前台的?

2020-04-17 11:09:02 +08:00
 chitanda

https://imagelol.com/image/6rIf5
前段时间发现微信后台活动极其频繁,电池耗电太大,于是每次用过后都会去强制上滑关闭.
昨天有那么一两次没有上滑关闭,竟然后台运行了 3 个多小时,前台也就用了 2 个小时.
微信是怎么做到的? 早就关闭了后台刷新.
iPhone11,iOS13.4

7587 次点击
所在节点    iOS
18 条回复
Lin0936
2020-04-17 11:17:24 +08:00
background push?
opengps
2020-04-17 11:20:32 +08:00
凡是 im 工具都有实时性要求。因此就必然会设法保活,通过长连接或者密集的短连接心跳来尽可能实时的检测是否有新消息,属于打开了就进坑不关闭的那种,他的计时也就分分秒秒都在消耗运行时长
chitanda
2020-04-17 11:22:10 +08:00
@opengps iOS 的推送不是走的苹果自己的吗?不需要后台 app 自己来保活吧
0312birdzhang
2020-04-17 11:26:08 +08:00
最近我也发现了,貌似是从 13.4 开始的。现在不强杀进程根本压不住。
kera0a
2020-04-17 11:32:41 +08:00
其他的各种方式拉起 app 后运行时间都很短,拉起了也是冻结状态。

微信从前台回到后台时,可以申请个后台任务,系统会动态分配几分钟时间后台执行这个任务,之后 app 才会被冻结。

频繁打开微信,那微信就基本就一直在后台了
opengps
2020-04-17 11:34:13 +08:00
@chitanda 虽然我不懂 ios,但是我可以根据我个人的 socekt 开发经验来说:依赖第三方的推送(这里指系统推送),实时性怕是远远不如自己进程内部的长连接或者密集短链接轮训更有效果
TangMonk
2020-04-17 11:37:56 +08:00
@kera0a background task 好像是 iOS13 才有的吧, 请教下 iOS 之前用的是什么方式实现后天运行的?
dorentus
2020-04-17 11:38:58 +08:00
@opengps iOS 不需要。iOS 普通应用在后台无法自己连接网络。
kera0a
2020-04-17 11:44:19 +08:00
@TangMonk 这个好像 iOS4 就支持了,是一直都有的
opengps
2020-04-17 11:45:31 +08:00
@dorentus 谢谢,受教了
daozhihun
2020-04-17 11:46:50 +08:00
你把微信放在后台后,系统会给一定的后台时间的。我猜是因为你频繁在打开微信,所以加起来时间就长了。别的 app 你不会用的这么频繁
lizhuoli
2020-04-17 12:38:42 +08:00
@TangMonk iOS 13 只是把原来多种后台的策略,包括后台刷新,后台任务(最大 5 分钟),后台定位音频 VoIP,这些概念统一到一起,提供了一个新的 BackgroundTasks.framework,目前没有新增功能,只是优化 API 而已,写起来舒服点
lizhuoli
2020-04-17 12:40:58 +08:00
@lizhuoli 原来的 API 其实设计很烂,属于那种短平快,依赖一个 Int 标记定位 task,还必须手动取消,大项目很容易坑的设计。现在基于一个抽象对象,有各种生命周期回调和通知,终于可以说是一个正常人设计的 API 了
kojirou
2020-04-17 14:18:23 +08:00
微信后台占那么多消息接受也没见快啊
BradZhou
2020-04-17 14:23:28 +08:00
看更新就知道 国产 app 更新都是 200m 起步的 其它 app 基本都几十 m 就够了 没见安分守己过
chitanda
2020-04-17 14:49:32 +08:00
@kera0a
@daozhihun
不是频繁打开的问题,我用了之后都是直接上滑关闭,平时后台最多几分钟,昨天有一两次忘记关闭了居然多了三个小时的后台时间
clrss
2020-04-17 15:00:12 +08:00
iOS 一直允许 3 分钟后台(不需要开启后台刷新).

正常 App 是干完活就停. 比如加载网页时切出去看看, 浏览器继续后台加载, 加载完就停.

国产流氓么: 有 3 分钟就用满 3 分钟.
TangMonk
2020-04-17 15:15:14 +08:00
@lizhuoli #12 原来如此,谢谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/663354

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX