V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chitanda
V2EX  ›  iOS

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

  •  
  •   chitanda · 2020-04-17 11:09:02 +08:00 · 7502 次点击
    这是一个创建于 1467 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    第 1 条附言  ·  2020-05-22 22:46:05 +08:00
    今天突然发现,上划关闭微信后,微信竟然还可以在后台持续活动(设置-电池看到的),可能和我升级到了 iOS13.5 有关。
    第 2 条附言  ·  2020-06-13 11:25:17 +08:00
    现在我发现了。如果频繁打开微信,并且每次用了上划退出,那么 iOS 会直接把微信保存在内存。然后在电池里面看,微信随时都在后台,不管有没有上划退出。这种机制删除微信重新安装可以归零,之后唯一的解决办法就是少用微信了
    18 条回复    2020-04-17 15:15:14 +08:00
    Lin0936
        1
    Lin0936  
       2020-04-17 11:17:24 +08:00
    background push?
    opengps
        2
    opengps  
       2020-04-17 11:20:32 +08:00
    凡是 im 工具都有实时性要求。因此就必然会设法保活,通过长连接或者密集的短连接心跳来尽可能实时的检测是否有新消息,属于打开了就进坑不关闭的那种,他的计时也就分分秒秒都在消耗运行时长
    chitanda
        3
    chitanda  
    OP
       2020-04-17 11:22:10 +08:00
    @opengps iOS 的推送不是走的苹果自己的吗?不需要后台 app 自己来保活吧
    0312birdzhang
        4
    0312birdzhang  
       2020-04-17 11:26:08 +08:00
    最近我也发现了,貌似是从 13.4 开始的。现在不强杀进程根本压不住。
    kera0a
        5
    kera0a  
       2020-04-17 11:32:41 +08:00 via iPhone
    其他的各种方式拉起 app 后运行时间都很短,拉起了也是冻结状态。

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

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

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

    国产流氓么: 有 3 分钟就用满 3 分钟.
    TangMonk
        18
    TangMonk  
       2020-04-17 15:15:14 +08:00
    @lizhuoli #12 原来如此,谢谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5292 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 01:25 · PVG 09:25 · LAX 18:25 · JFK 21:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.