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

2022-10-29 13:31:28 +08:00
 voidwhy
还经常后台活动,我都关闭后台刷新了呀,真的不想带充电宝出门 :(
11634 次点击
所在节点    iPhone
55 条回复
geeksammao
2022-10-29 18:15:05 +08:00
@zilil 你拿两个完全不相关的东西类比啥呢...“有小程序能上架”和“微信退到后台 iOS 照样允许占用资源”这是一回事?苹果允许微信上架一些敏感功能,会为了它专门留兼容代码,不代表会为了它把系统 API 改了。
“iPhone 12 放一晚上掉电 50%是因为微信被开了绿灯”有证据吗?我之前用 iPhone 12 的时候可从没遇到过。
bao3
2022-10-29 18:23:48 +08:00
@geeksammao 如果你越过狱,你用 cocatop 会发现你把微信退后台,后台刷新也关闭,但微信还会在进程里唤醒。虽然这不能证明有没有对它特殊照顾,但起码可以说明微信后不后台,都一样在耗电。
Rhianu
2022-10-29 18:25:29 +08:00
我有一种猜测,只是猜测。有没有可能微信在利用手机的性能,在进行碎片化的计算,利用手机做一些图片、文字等内容的识别,也有可能不只如此。
geeksammao
2022-10-29 18:37:15 +08:00
@bao3 我没越过狱。但我了解 OS 的开发者文档和 API ,我也有不少朋友在微信负责 iOS 研发,所以我知道排除开绿灯的阴谋论下,微信无法在后台非法调用 CPU 。你说的情况如果属实,那么我的猜测:iOS 允许 app 在收到通知时短暂唤醒,或微信利用后台下载、定位等 API 短暂唤醒。
我个人的使用体验,微信没有后台长时间异常唤醒过( bug 除外),iOS 开发者文档说明了 app 退到后台大部分情况就无法使用 CPU ,以及在 iOS 上暗戳戳干这种事也没有什么收益。
geeksammao
2022-10-29 18:38:58 +08:00
@Rhianu 可以先说明下有 iOS app 如何能够在后台具备这种能力。非苹果开绿灯阴谋论的那种
katoyu
2022-10-29 18:39:13 +08:00
很抱歉监控软件肯定耗电,你想路上的摄像头不都是 24 小时插电的嘛。微信这种世纪垃圾产品,99%的功能都是垃圾。为全民设计的监控,全民还乐在其中。。。。
lovepplforever
2022-10-29 18:42:27 +08:00
用了 13 pro max ,感觉电量很够
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
2022-10-29 19:19:52 +08:00
@katoyu
@Rhianu
@geeksammao
@CastleBUPT
我作为一个 iOS 开发者说一说吧,微信确认是调用了私有的 api ,不过这种 api 很多应用在调用,就是参数传递的时候传了一个没公开的值进去,就是拦截链接跳转应用那个功能。其它的私有 api 不确定。

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

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

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

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

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

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


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

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

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

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

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

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

微信的相机不用系统 API 相册不用系统 API 网页不用系统 API
相机不用系统的就算了 但是相册和网页不用系统 API 属实垃圾

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

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

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

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

© 2021 V2EX