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

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

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

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

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

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

    而且 iOS 是能根据条件自动启动 app 在后台运行的。上一个版本的 iOS ,上车后 BMW app 就被强行唤起在后台运行了,导致我一段时间都删了这个 app ,并且禁用 Siri ( Siri 禁用后 CarPlay 无法启动)。直到当前这个 iOS 版本才允许设置是否 CarPlay 连接时自动唤醒 BMW app 。
    xtinput
        29
    xtinput  
       2022-10-29 19:19:52 +08:00   ❤️ 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  
       2022-10-29 19:21:30 +08:00
    @H0H 后台应用冻结的是 CPU ,内存没释放,微信内存占用大。内存的能耗可不低。
    H0H
        31
    H0H  
       2022-10-29 19:27:48 +08:00
    @xtinput 但看设置>电池里面的统计,显示的是 app 在后台偷偷的运行时间,不涉及内存。像微信不杀的话有时候会后台一直持续运行,所以我现在都是随手杀。

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

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

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

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

    微信的相机不用系统 API 相册不用系统 API 网页不用系统 API
    相机不用系统的就算了 但是相册和网页不用系统 API 属实垃圾
    iyeatse
        41
    iyeatse  
       2022-10-29 21:50:17 +08:00
    不是频繁使用的 app 用完随手划掉是好文明,Apple 提供了很多机制可以把 app 从后台静默唤醒,但是如果用户主动划掉的话大多数情况都不生效了。
    huangweipeng
        42
    huangweipeng  
       2022-10-29 21:51:14 +08:00
    一个系统能不费电吗?
    iAndychan
        43
    iAndychan  
       2022-10-29 23:19:53 +08:00
    @geeksammao 一个从 iOS9 我就发现的现象,手机刷机以后安装微信不需要打开,这个时候打开设置进入 Wi-Fi 扫描网络,这个时候系统会弹出提示是否允许微信发送通知。证明微信不需要用户手动打开就能够自动后台运行一段时间。
    vmebeh
        44
    vmebeh  
       2022-10-29 23:28:37 +08:00 via iPhone
    有个说法是微信支付宝注册了 wifi helper ,只要连 wifi 就会唤醒
    xtinput
        45
    xtinput  
       2022-10-29 23:50:00 +08:00
    @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  
       2022-10-30 00:37:54 +08:00 via iPhone
    说微信就是 App 界的 JB ,那都是在夸他。远离微信,珍爱生命吧。
    Rhianu
        47
    Rhianu  
       2022-10-30 01:41:41 +08:00
    @geeksammao 碎片化的计算一直都不需要 App 在后台一直运行。只需要你在开启并使用 App 的时候悄悄捎带私活就可以了。参考前段时间挖矿火的时候,很多游戏免费加速器就会偷偷的在使用 App 的挖矿,关掉后自行停止。在正常的商业公司,也会利用 App 在启动时做一些脱敏的分布式计算。
    SiLenceControL
        48
    SiLenceControL  
       2022-10-30 07:21:02 +08:00 via iPhone
    @zilil 12mini 放一晚上才掉 5%
    AllenHua
        49
    AllenHua  
       2022-10-30 08:31:23 +08:00 via iPhone
    你说你发一段文本,一张图片一个视频都要被审核代码确定一下是否是敏感内容,能不耗电🐎️
    iAndychan
        50
    iAndychan  
       2022-10-30 10:18:28 +08:00
    @xtinput 你发的和我发的完全没关系……
    Nitroethane
        51
    Nitroethane  
       2022-10-30 12:58:23 +08:00 via iPhone
    @xtinput 为什么线程间通信比进程间通信的开销更大?
    siweipancc
        52
    siweipancc  
       2022-10-30 13:05:59 +08:00 via iPhone
    插,等技术分享
    Nitroethane
        53
    Nitroethane  
       2022-10-30 13:24:49 +08:00 via iPhone
    @xtinput 怎么可能只有重启或者用户注销才释放,那内存管理是有多蠢。内核会根据内存压力动态管理这些用于缓存的内存,内存压力过大时这些内存完全可以收回再利用
    TmacV2
        54
    TmacV2  
       2022-10-31 13:24:33 +08:00
    @bao3 那我微信双开,费电不是 double 了吗
    lchynn
        55
    lchynn  
       2022-11-05 14:27:49 +08:00
    有没有这样的代理开源服务, 比如把微信部署在虚拟机中(云端),然后通过代理服务,把微信信息通知和群信息转发到其他节省资源的 IM APP 上,譬如 telegram ;
    微信收到信息,转发到你自己的电报 channel 中, 你向这个 channel 的机器人发信息, 代理服务帮你转发到你的微信。

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