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

为什么 ios 端的微信这么耗电呢

  •  
  •   voidwhy · 333 天前 · 7192 次点击
    这是一个创建于 333 天前的主题,其中的信息可能已经有所发展或是发生改变。
    还经常后台活动,我都关闭后台刷新了呀,真的不想带充电宝出门 :(
    55 条回复    2022-11-05 14:27:49 +08:00
    kaz10025
        1
    kaz10025  
       333 天前   ❤️ 2
    如果你的列表只剩一个人 还耗电吗?
    fengziyun
        2
    fengziyun  
       333 天前 via Android
    实时定位后台刷新乱七八槽的都关了
    ericwoflskin
        3
    ericwoflskin  
       333 天前
    关后台没用,只要一用就哗哗掉电,原因无非是代码垃圾,或跑的垃圾太多。
    CastleBUPT
        4
    CastleBUPT  
       333 天前 via iPhone
    小程序肯定是微信的高优功能,为了优化小程序体验,应该是调用了很多私有 api ,这应该是被苹果容忍了。但是很多私有 api 性能很差,而且基本没有地方公开讨论优化私有 api 的办法,除非苹果发神经去帮微信优化,否则基本无解
    hervey0424
        5
    hervey0424  
       333 天前
    安卓端的同样费电
    wu67
        6
    wu67  
       333 天前   ❤️ 1
    有没有可能, 安卓端的也费电, 只是因为安卓各厂商电池容量猛的往上堆, 显得消耗没那么快而已
    zilil
        7
    zilil  
       333 天前 via iPhone
    @kaz10025 有个小号只有一个人也很耗电,
    @ericwoflskin @CastleBUPT @hervey0424 iOS 统计微信耗电量比原神还耗电两倍。
    @wu67 安卓电池动不动就五千多毫安,跟 iPhone 两千多没法比,而且充电功率动不动就 200W 10 分钟充满 100%,微信比原神还耗电 10 倍也压地住
    zilil
        8
    zilil  
       333 天前 via iPhone
    国外 2022 年看到很多人 iPhone7 ,iPhone8 用着 Instagram WhatsApp 也不卡,WhatsApp iMessage 聊天记录也是十几 GB 。iMessage 聊天图片视频原件可以存在 iCloud ,本地只保留缩略图,之后需要再从 iCloud 下载。存储空间可以降低 95%

    相比国内 iPhone12promax 256GB 压不住微信,电池半天就没电了。不买当年的旗舰没办法用一整天。
    zilil
        9
    zilil  
       333 天前 via iPhone
    @CastleBUPT #4 但是不用小程序也很耗电,如此耗电接收一条消息能接受中收取中连接中 20 秒才能完成接收一条不到几 kb 的文字消息,之后问下之前加的微信工程师看下

    不过感觉是微信担心 ground up 完全架构重构地 revolutionary 地维护更新万一导致宕机影响太大,哪怕不优化性能也不能宕机。像 WhatsApp 韩国的 kakaotalk 一年都宕机好几次。前几天 kakaotalk 宕机几小时整个韩国都崩溃了,生活的衣食住行都是问题,韩国 president 都开始为公众道歉。
    H0H
        10
    H0H  
       333 天前
    都 iOS 版了还后台放着微信干嘛?毕竟通知不用 app 自己管。我都是随用随启,平时养成的习惯是所有 app 用完就上滑删除。现在连用安卓都是这个习惯,而且安卓所有 app 都是进黑名单,锁屏就全杀,一个不留。
    geeksammao
        11
    geeksammao  
       333 天前 via iPhone   ❤️ 1
    @H0H 可是 iOS 上滑删除 app 并不能省电,除非你之后不需要打开。iOS 后台 app 除了下载和导航等场景,本身就不能占用 cpu 资源,你上滑再重新打开反而消耗了 cpu
    CastleBUPT
        12
    CastleBUPT  
       333 天前 via iPhone
    @zilil 就算不用,有些组件也要提前加载
    makelove
        13
    makelove  
       333 天前
    自从用了 iPhone 微信经常性消息延迟几分钟以上,不知道什么原因
    别人发语音通话直到别人挂了我这里才出来个消息
    非常耽误事
    ghs55kai
        14
    ghs55kai  
       333 天前 via iPhone
    后台活动这个也困扰我 小火箭就这样
    whywaoxaks
        15
    whywaoxaks  
       333 天前
    为什么不用 tg ?!
    zilil
        16
    zilil  
       333 天前 via iPhone
    @geeksammao #11 但国产流氓 App 不按照规范写,耗电量跟 iMessage WhatsApp 没法比,微信不关掉放一晚上手机 50%的电都要被它消耗掉了,苹果也不敢下架微信。
    geeksammao
        17
    geeksammao  
       333 天前   ❤️ 2
    @zilil 我们俩的是同一个微信?我微信放一晚上没有消息的情况下耗电量是 0 。再怎么不按规范写,苹果给你的 API 就那么多,系统对 app 的限制是一样的,退后台不调用导航等功能就是无法占用 CPU 。你硬要说微信特殊到这种限制苹果也给开绿灯,那我也无话可说。
    zilil
        18
    zilil  
       333 天前 via iPhone
    @geeksammao iPhone 12 确实是放一晚上掉电 50%,苹果确实给微信开绿灯了,比如允许小程序这样的第三方 App Store ,iOS 有专门的代码兼容微信。https://www.51cto.com/article/641948.html 苹果底层开源代码被发现包含兼容微信的代码 https://m.ithome.com/html/503845.htm 小程序就是大破例,苹果高管称对微信早有特殊优待
    dunn
        19
    dunn  
       333 天前 via iPhone   ❤️ 1
    老话题了。张没妈呗
    bao3
        20
    bao3  
       333 天前
    微信这玩意,吃内存,吃存储,还费电。就这么说吧,手机的更新换代速度赶不上它的膨胀速度。
    geeksammao
        21
    geeksammao  
       333 天前   ❤️ 1
    @zilil 你拿两个完全不相关的东西类比啥呢...“有小程序能上架”和“微信退到后台 iOS 照样允许占用资源”这是一回事?苹果允许微信上架一些敏感功能,会为了它专门留兼容代码,不代表会为了它把系统 API 改了。
    “iPhone 12 放一晚上掉电 50%是因为微信被开了绿灯”有证据吗?我之前用 iPhone 12 的时候可从没遇到过。
    bao3
        22
    bao3  
       333 天前
    @geeksammao 如果你越过狱,你用 cocatop 会发现你把微信退后台,后台刷新也关闭,但微信还会在进程里唤醒。虽然这不能证明有没有对它特殊照顾,但起码可以说明微信后不后台,都一样在耗电。
    Rhianu
        23
    Rhianu  
       333 天前
    我有一种猜测,只是猜测。有没有可能微信在利用手机的性能,在进行碎片化的计算,利用手机做一些图片、文字等内容的识别,也有可能不只如此。
    geeksammao
        24
    geeksammao  
       333 天前
    @bao3 我没越过狱。但我了解 OS 的开发者文档和 API ,我也有不少朋友在微信负责 iOS 研发,所以我知道排除开绿灯的阴谋论下,微信无法在后台非法调用 CPU 。你说的情况如果属实,那么我的猜测:iOS 允许 app 在收到通知时短暂唤醒,或微信利用后台下载、定位等 API 短暂唤醒。
    我个人的使用体验,微信没有后台长时间异常唤醒过( bug 除外),iOS 开发者文档说明了 app 退到后台大部分情况就无法使用 CPU ,以及在 iOS 上暗戳戳干这种事也没有什么收益。
    geeksammao
        25
    geeksammao  
       333 天前
    @Rhianu 可以先说明下有 iOS app 如何能够在后台具备这种能力。非苹果开绿灯阴谋论的那种
    katoyu
        26
    katoyu  
       333 天前   ❤️ 3
    很抱歉监控软件肯定耗电,你想路上的摄像头不都是 24 小时插电的嘛。微信这种世纪垃圾产品,99%的功能都是垃圾。为全民设计的监控,全民还乐在其中。。。。
    lovepplforever
        27
    lovepplforever  
       333 天前
    用了 13 pro max ,感觉电量很够
    H0H
        28
    H0H  
       333 天前
    @geeksammao 理论上讲 iOS 后台的 app 是冻结状态,不会耗电。可实际上根本不是这样啊,iOS 前几个版本就已经偷偷支持 app 在后台一直运行了。就是因为微信等在后台一直耗电(设置里电池那里可以看到),所以我才养成了随手杀掉所有 app 的习惯。

    至于再次打开 app 带来的耗电,因为启动只有几秒钟,这点耗电很小的,不值得考虑。

    而且 iOS 是能根据条件自动启动 app 在后台运行的。上一个版本的 iOS ,上车后 BMW app 就被强行唤起在后台运行了,导致我一段时间都删了这个 app ,并且禁用 Siri ( Siri 禁用后 CarPlay 无法启动)。直到当前这个 iOS 版本才允许设置是否 CarPlay 连接时自动唤醒 BMW app 。
    xtinput
        29
    xtinput  
       333 天前   ❤️ 15
    @katoyu
    @Rhianu
    @geeksammao
    @CastleBUPT
    我作为一个 iOS 开发者说一说吧,微信确认是调用了私有的 api ,不过这种 api 很多应用在调用,就是参数传递的时候传了一个没公开的值进去,就是拦截链接跳转应用那个功能。其它的私有 api 不确定。

    耗电的原因是微信的网络全接管了,所有的网络请求都走的是微信自己的网络框架,性能怎么可能比的过系统的?
    微信内建了一个服务器,而且会分析外部网页的内容并把链接进行替换加上代理,这里面有没有将所有内容都上传到后台进行监控我就不清楚了,反正用户用 http(s)工具抓包是抓不到什么数据的。

    然后根据微信的内部开发人员(负责腾讯整个视频传输相关模块的高级工程师)说,22 年上半年微信网络框架进行了一次重构,但是他们内部人员都不看好这次重构,并且还有不少 BUG 挂起在那没有修复(玄学 BUG)。

    2020 年的时候经常出现玄学发烫问题,现在用微信发烫基本没遇到了。可能 BUG 少了一些了吧。

    还有就是之前微信被频繁杀后台,根据系统的日志分析,微信频繁切换线程,线程切换是很消耗 cpu 性能的。

    小程序:苹果的 webkit 是一个独立的进程运行,也就是说系统只要启动了,那么所有的网页都会在那个独立的进程里面进行解析,然而微信小程序就是一个类似 webkit 的框架,但 iOS 应用限制,一个应用就是一个独立的进程,所以小程序和微信主体跑在一个进程里面,于是就得多开线程,线程通信比进程通信更消耗性能。

    监控:微信肯定有监控用户日常使用的,整个网络框架都被接管了,这监控是分分钟的事情。主要是网络监控,像麦克风定位相机这些静默监控做不到的。


    还有一个就是微信的提前加载,有没有注意到一个现象,打开微信的时候微信消息列表会加载一下,然后点击具体的消息进去就很快,微信在打开的时候就把数据读取解析到内存里面了,而且微信每次刚打开一段时间很流畅,但是用久了就卡,这是它内存一直没释放,比如朋友圈,你滑动到下面返回,再进去还是你上次的位置,我特意研究过微信的内存变化,在点击进入朋友圈以及小程序的时候内存会突然暴涨,但返回之后内存并没变化,根本就没释放。

    所以,微信耗电的元凶就在于网络和内存一直占用没释放,虽然每次使用再申请内存会慢点,但不用的时候还不释放这就造成了杀掉其它 app 进程了,不会真后台运行,但那只是 cpu 暂停,内存还在,也就是说微信到后台之后它的内存不会释放,除非运行其它 app 内存不够被干掉,然后结合苹果那个堆管理的为了给微信留的那个变量,感觉那个变量就是标记微信运行状态的,对于后台应用释放内存是有优先级的,在后台的时候先释放其它应用,微信最后释放。
    xtinput
        30
    xtinput  
       333 天前
    @H0H 后台应用冻结的是 CPU ,内存没释放,微信内存占用大。内存的能耗可不低。
    H0H
        31
    H0H  
       333 天前
    @xtinput 但看设置>电池里面的统计,显示的是 app 在后台偷偷的运行时间,不涉及内存。像微信不杀的话有时候会后台一直持续运行,所以我现在都是随手杀。

    另外,不清楚 iOS 的缓存机制,如果是像 macOS 那样,那么杀掉后,其实 app 的代码和数据依然是缓存在内存中的,再次加载速度会很快。

    还有,我养成一个习惯,就是每天晚上 /早上会通过捷径自动打开 /关闭飞行模式,并把电池设为省电状态。这样白天不怎么用手机前,都处于省电模式,也能减缓电量消耗
    xtinput
        32
    xtinput  
       333 天前
    @H0H macOS 的关闭只是关闭窗口,进程会后台运行,和 iOS 不一样。iOS 的杀掉 app 和 macOS 的 command+q 退出一样
    H0H
        33
    H0H  
       333 天前
    @xtinput macOS 上我肯定也是 Command+Q 来完全退出啊,只关闭窗口这个只要不是刚用 macOS 的都懂。

    我说的是 macOS 、也包括 windows ,即使完整关闭进程,其实内存中也会缓存其代码和数据。你在活动管理器>内存页下方的“已缓存文件”就能看到。如果你是软件工程师或有相关知识的话也能帮助理解。

    因为据说 macOS 团队已经被 iOS 团队接管了,从这次 macOS 更新的特性也能看出来,所以我才猜 iOS 可能也有类似缓存机制。
    xtinput
        34
    xtinput  
       333 天前
    @H0H 哦哦,你说的这个呀,这个是所有的操作系统都有的一个文件读取机制,也只有文件系统有这个缓存,就是我通过一个路径加载了文件,下次再使用这个路径使用文件的时候就直接把这块内存拿过去用了,这个只有重启系统(macOS 退出当前用户登录也行)才会释放。
    James369
        35
    James369  
       333 天前
    原因就是,没有操作系统的命,却一直想干操作系统的事
    lovepplforever
        36
    lovepplforever  
       333 天前
    @xtinput 苹果还专门给微信提供了一个单独的接口?
    xtinput
        37
    xtinput  
       333 天前   ❤️ 1
    @lovepplforever 不是给微信提供的,那个拦截网页跳转 APP 的是系统里面内置了的功能,但是参数没暴露出来,微信应该是碰撞出来了,然后就用上了
    xtinput
        38
    xtinput  
       333 天前
    @lovepplforever 单独的那个在 18 楼
    leesamsik
        39
    leesamsik  
       333 天前 via iPhone
    搞得跟安卓端就不费电一样
    b19g3r
        40
    b19g3r  
       333 天前
    歪个楼
    > 微信内建了一个服务器,而且会分析外部网页的内容并把链接进行替换加上代理

    微信的相机不用系统 API 相册不用系统 API 网页不用系统 API
    相机不用系统的就算了 但是相册和网页不用系统 API 属实垃圾
    iyeatse
        41
    iyeatse  
       333 天前
    不是频繁使用的 app 用完随手划掉是好文明,Apple 提供了很多机制可以把 app 从后台静默唤醒,但是如果用户主动划掉的话大多数情况都不生效了。
    huangweipeng
        42
    huangweipeng  
       333 天前
    一个系统能不费电吗?
    iAndychan
        43
    iAndychan  
       333 天前
    @geeksammao 一个从 iOS9 我就发现的现象,手机刷机以后安装微信不需要打开,这个时候打开设置进入 Wi-Fi 扫描网络,这个时候系统会弹出提示是否允许微信发送通知。证明微信不需要用户手动打开就能够自动后台运行一段时间。
    vmebeh
        44
    vmebeh  
       333 天前 via iPhone
    有个说法是微信支付宝注册了 wifi helper ,只要连 wifi 就会唤醒
    xtinput
        45
    xtinput  
       333 天前
    @b19g3r 相机和相册就是系统的 API ,只是 UI 自己定义的

    我封装了一个扫码的,就是用系统的 API 做的,只是简单的控件,可高度自定义
    https://github.com/darvintang/DVTScan

    相册系统有不带 UI 的 API ,获取所有的照片和相册,然后把这些数据自己定义 UI 就 OK

    @iAndychan
    @vmebeh
    @b19g3r
    https://www.v2ex.com/t/532660
    R0ckyY2
        46
    R0ckyY2  
       333 天前 via iPhone
    说微信就是 App 界的 JB ,那都是在夸他。远离微信,珍爱生命吧。
    Rhianu
        47
    Rhianu  
       333 天前
    @geeksammao 碎片化的计算一直都不需要 App 在后台一直运行。只需要你在开启并使用 App 的时候悄悄捎带私活就可以了。参考前段时间挖矿火的时候,很多游戏免费加速器就会偷偷的在使用 App 的挖矿,关掉后自行停止。在正常的商业公司,也会利用 App 在启动时做一些脱敏的分布式计算。
    SiLenceControL
        48
    SiLenceControL  
       332 天前 via iPhone
    @zilil 12mini 放一晚上才掉 5%
    AllenHua
        49
    AllenHua  
       332 天前 via iPhone
    你说你发一段文本,一张图片一个视频都要被审核代码确定一下是否是敏感内容,能不耗电🐎️
    iAndychan
        50
    iAndychan  
       332 天前
    @xtinput 你发的和我发的完全没关系……
    Nitroethane
        51
    Nitroethane  
       332 天前 via iPhone
    @xtinput 为什么线程间通信比进程间通信的开销更大?
    siweipancc
        52
    siweipancc  
       332 天前 via iPhone
    插,等技术分享
    Nitroethane
        53
    Nitroethane  
       332 天前 via iPhone
    @xtinput 怎么可能只有重启或者用户注销才释放,那内存管理是有多蠢。内核会根据内存压力动态管理这些用于缓存的内存,内存压力过大时这些内存完全可以收回再利用
    TmacV2
        54
    TmacV2  
       331 天前
    @bao3 那我微信双开,费电不是 double 了吗
    lchynn
        55
    lchynn  
       326 天前
    有没有这样的代理开源服务, 比如把微信部署在虚拟机中(云端),然后通过代理服务,把微信信息通知和群信息转发到其他节省资源的 IM APP 上,譬如 telegram ;
    微信收到信息,转发到你自己的电报 channel 中, 你向这个 channel 的机器人发信息, 代理服务帮你转发到你的微信。

    这样 iphone 上只要安装节省资源且安全的 im 就可以了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   867 人在线   最高记录 6067   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 21:53 · PVG 05:53 · LAX 14:53 · JFK 17:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.