V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
chitanda
V2EX  ›  iOS

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

  •  
  •   chitanda · Apr 17, 2020 · 8751 views
    This topic created in 2212 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    国产流氓么: 有 3 分钟就用满 3 分钟.
    TangMonk
        18
    TangMonk  
       Apr 17, 2020
    @lizhuoli #12 原来如此,谢谢。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1272 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 64ms · UTC 17:34 · PVG 01:34 · LAX 10:34 · JFK 13:34
    ♥ Do have faith in what you're doing.