1
kaz10025 2022-10-29 13:57:12 +08:00 2
如果你的列表只剩一个人 还耗电吗?
|
2
fengziyun 2022-10-29 14:28:15 +08:00 via Android
实时定位后台刷新乱七八槽的都关了
|
3
ericwoflskin 2022-10-29 14:52:00 +08:00
关后台没用,只要一用就哗哗掉电,原因无非是代码垃圾,或跑的垃圾太多。
|
4
CastleBUPT 2022-10-29 15:21:08 +08:00 via iPhone
小程序肯定是微信的高优功能,为了优化小程序体验,应该是调用了很多私有 api ,这应该是被苹果容忍了。但是很多私有 api 性能很差,而且基本没有地方公开讨论优化私有 api 的办法,除非苹果发神经去帮微信优化,否则基本无解
|
5
hervey0424 2022-10-29 15:31:32 +08:00
安卓端的同样费电
|
6
wu67 2022-10-29 15:33:27 +08:00 1
有没有可能, 安卓端的也费电, 只是因为安卓各厂商电池容量猛的往上堆, 显得消耗没那么快而已
|
7
zilil 2022-10-29 15:58:34 +08:00 via iPhone
@kaz10025 有个小号只有一个人也很耗电,
@ericwoflskin @CastleBUPT @hervey0424 iOS 统计微信耗电量比原神还耗电两倍。 @wu67 安卓电池动不动就五千多毫安,跟 iPhone 两千多没法比,而且充电功率动不动就 200W 10 分钟充满 100%,微信比原神还耗电 10 倍也压地住 |
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 压不住微信,电池半天就没电了。不买当年的旗舰没办法用一整天。 |
9
zilil 2022-10-29 16:11:48 +08:00 via iPhone
@CastleBUPT #4 但是不用小程序也很耗电,如此耗电接收一条消息能接受中收取中连接中 20 秒才能完成接收一条不到几 kb 的文字消息,之后问下之前加的微信工程师看下
不过感觉是微信担心 ground up 完全架构重构地 revolutionary 地维护更新万一导致宕机影响太大,哪怕不优化性能也不能宕机。像 WhatsApp 韩国的 kakaotalk 一年都宕机好几次。前几天 kakaotalk 宕机几小时整个韩国都崩溃了,生活的衣食住行都是问题,韩国 president 都开始为公众道歉。 |
10
H0H 2022-10-29 16:15:57 +08:00
都 iOS 版了还后台放着微信干嘛?毕竟通知不用 app 自己管。我都是随用随启,平时养成的习惯是所有 app 用完就上滑删除。现在连用安卓都是这个习惯,而且安卓所有 app 都是进黑名单,锁屏就全杀,一个不留。
|
11
geeksammao 2022-10-29 16:26:14 +08:00 via iPhone 1
@H0H 可是 iOS 上滑删除 app 并不能省电,除非你之后不需要打开。iOS 后台 app 除了下载和导航等场景,本身就不能占用 cpu 资源,你上滑再重新打开反而消耗了 cpu
|
12
CastleBUPT 2022-10-29 16:37:23 +08:00 via iPhone
@zilil 就算不用,有些组件也要提前加载
|
13
makelove 2022-10-29 16:39:10 +08:00
自从用了 iPhone 微信经常性消息延迟几分钟以上,不知道什么原因
别人发语音通话直到别人挂了我这里才出来个消息 非常耽误事 |
14
ghs55kai 2022-10-29 16:48:13 +08:00 via iPhone
后台活动这个也困扰我 小火箭就这样
|
15
whywaoxaks 2022-10-29 16:53:04 +08:00
为什么不用 tg ?!
|
16
zilil 2022-10-29 16:59:05 +08:00 via iPhone
@geeksammao #11 但国产流氓 App 不按照规范写,耗电量跟 iMessage WhatsApp 没法比,微信不关掉放一晚上手机 50%的电都要被它消耗掉了,苹果也不敢下架微信。
|
17
geeksammao 2022-10-29 17:02:51 +08:00 2
@zilil 我们俩的是同一个微信?我微信放一晚上没有消息的情况下耗电量是 0 。再怎么不按规范写,苹果给你的 API 就那么多,系统对 app 的限制是一样的,退后台不调用导航等功能就是无法占用 CPU 。你硬要说微信特殊到这种限制苹果也给开绿灯,那我也无话可说。
|
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 小程序就是大破例,苹果高管称对微信早有特殊优待
|
19
dunn 2022-10-29 17:45:56 +08:00 via iPhone 1
老话题了。张没妈呗
|
20
bao3 2022-10-29 17:53:14 +08:00
微信这玩意,吃内存,吃存储,还费电。就这么说吧,手机的更新换代速度赶不上它的膨胀速度。
|
21
geeksammao 2022-10-29 18:15:05 +08:00 1
@zilil 你拿两个完全不相关的东西类比啥呢...“有小程序能上架”和“微信退到后台 iOS 照样允许占用资源”这是一回事?苹果允许微信上架一些敏感功能,会为了它专门留兼容代码,不代表会为了它把系统 API 改了。
“iPhone 12 放一晚上掉电 50%是因为微信被开了绿灯”有证据吗?我之前用 iPhone 12 的时候可从没遇到过。 |
22
bao3 2022-10-29 18:23:48 +08:00
@geeksammao 如果你越过狱,你用 cocatop 会发现你把微信退后台,后台刷新也关闭,但微信还会在进程里唤醒。虽然这不能证明有没有对它特殊照顾,但起码可以说明微信后不后台,都一样在耗电。
|
23
Rhianu 2022-10-29 18:25:29 +08:00
我有一种猜测,只是猜测。有没有可能微信在利用手机的性能,在进行碎片化的计算,利用手机做一些图片、文字等内容的识别,也有可能不只如此。
|
24
geeksammao 2022-10-29 18:37:15 +08:00
@bao3 我没越过狱。但我了解 OS 的开发者文档和 API ,我也有不少朋友在微信负责 iOS 研发,所以我知道排除开绿灯的阴谋论下,微信无法在后台非法调用 CPU 。你说的情况如果属实,那么我的猜测:iOS 允许 app 在收到通知时短暂唤醒,或微信利用后台下载、定位等 API 短暂唤醒。
我个人的使用体验,微信没有后台长时间异常唤醒过( bug 除外),iOS 开发者文档说明了 app 退到后台大部分情况就无法使用 CPU ,以及在 iOS 上暗戳戳干这种事也没有什么收益。 |
25
geeksammao 2022-10-29 18:38:58 +08:00
@Rhianu 可以先说明下有 iOS app 如何能够在后台具备这种能力。非苹果开绿灯阴谋论的那种
|
26
katoyu 2022-10-29 18:39:13 +08:00 3
很抱歉监控软件肯定耗电,你想路上的摄像头不都是 24 小时插电的嘛。微信这种世纪垃圾产品,99%的功能都是垃圾。为全民设计的监控,全民还乐在其中。。。。
|
27
lovepplforever 2022-10-29 18:42:27 +08:00
用了 13 pro max ,感觉电量很够
|
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 。 |
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 内存不够被干掉,然后结合苹果那个堆管理的为了给微信留的那个变量,感觉那个变量就是标记微信运行状态的,对于后台应用释放内存是有优先级的,在后台的时候先释放其它应用,微信最后释放。 |
31
H0H 2022-10-29 19:27:48 +08:00
@xtinput 但看设置>电池里面的统计,显示的是 app 在后台偷偷的运行时间,不涉及内存。像微信不杀的话有时候会后台一直持续运行,所以我现在都是随手杀。
另外,不清楚 iOS 的缓存机制,如果是像 macOS 那样,那么杀掉后,其实 app 的代码和数据依然是缓存在内存中的,再次加载速度会很快。 还有,我养成一个习惯,就是每天晚上 /早上会通过捷径自动打开 /关闭飞行模式,并把电池设为省电状态。这样白天不怎么用手机前,都处于省电模式,也能减缓电量消耗 |
32
xtinput 2022-10-29 19:30:33 +08:00
@H0H macOS 的关闭只是关闭窗口,进程会后台运行,和 iOS 不一样。iOS 的杀掉 app 和 macOS 的 command+q 退出一样
|
33
H0H 2022-10-29 19:41:56 +08:00
@xtinput macOS 上我肯定也是 Command+Q 来完全退出啊,只关闭窗口这个只要不是刚用 macOS 的都懂。
我说的是 macOS 、也包括 windows ,即使完整关闭进程,其实内存中也会缓存其代码和数据。你在活动管理器>内存页下方的“已缓存文件”就能看到。如果你是软件工程师或有相关知识的话也能帮助理解。 因为据说 macOS 团队已经被 iOS 团队接管了,从这次 macOS 更新的特性也能看出来,所以我才猜 iOS 可能也有类似缓存机制。 |
34
xtinput 2022-10-29 19:48:59 +08:00
@H0H 哦哦,你说的这个呀,这个是所有的操作系统都有的一个文件读取机制,也只有文件系统有这个缓存,就是我通过一个路径加载了文件,下次再使用这个路径使用文件的时候就直接把这块内存拿过去用了,这个只有重启系统(macOS 退出当前用户登录也行)才会释放。
|
35
James369 2022-10-29 19:56:29 +08:00
原因就是,没有操作系统的命,却一直想干操作系统的事
|
36
lovepplforever 2022-10-29 20:23:35 +08:00
@xtinput 苹果还专门给微信提供了一个单独的接口?
|
37
xtinput 2022-10-29 20:30:36 +08:00 1
@lovepplforever 不是给微信提供的,那个拦截网页跳转 APP 的是系统里面内置了的功能,但是参数没暴露出来,微信应该是碰撞出来了,然后就用上了
|
38
xtinput 2022-10-29 20:31:16 +08:00
@lovepplforever 单独的那个在 18 楼
|
39
leesamsik 2022-10-29 21:36:54 +08:00 via iPhone
搞得跟安卓端就不费电一样
|
40
b19g3r 2022-10-29 21:40:38 +08:00
歪个楼
> 微信内建了一个服务器,而且会分析外部网页的内容并把链接进行替换加上代理 微信的相机不用系统 API 相册不用系统 API 网页不用系统 API 相机不用系统的就算了 但是相册和网页不用系统 API 属实垃圾 |
41
iyeatse 2022-10-29 21:50:17 +08:00
不是频繁使用的 app 用完随手划掉是好文明,Apple 提供了很多机制可以把 app 从后台静默唤醒,但是如果用户主动划掉的话大多数情况都不生效了。
|
42
huangweipeng 2022-10-29 21:51:14 +08:00
一个系统能不费电吗?
|
43
iAndychan 2022-10-29 23:19:53 +08:00
@geeksammao 一个从 iOS9 我就发现的现象,手机刷机以后安装微信不需要打开,这个时候打开设置进入 Wi-Fi 扫描网络,这个时候系统会弹出提示是否允许微信发送通知。证明微信不需要用户手动打开就能够自动后台运行一段时间。
|
44
vmebeh 2022-10-29 23:28:37 +08:00 via iPhone
有个说法是微信支付宝注册了 wifi helper ,只要连 wifi 就会唤醒
|
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 |
46
R0ckyY2 2022-10-30 00:37:54 +08:00 via iPhone
说微信就是 App 界的 JB ,那都是在夸他。远离微信,珍爱生命吧。
|
47
Rhianu 2022-10-30 01:41:41 +08:00
@geeksammao 碎片化的计算一直都不需要 App 在后台一直运行。只需要你在开启并使用 App 的时候悄悄捎带私活就可以了。参考前段时间挖矿火的时候,很多游戏免费加速器就会偷偷的在使用 App 的挖矿,关掉后自行停止。在正常的商业公司,也会利用 App 在启动时做一些脱敏的分布式计算。
|
48
SiLenceControL 2022-10-30 07:21:02 +08:00 via iPhone
@zilil 12mini 放一晚上才掉 5%
|
49
AllenHua 2022-10-30 08:31:23 +08:00 via iPhone
你说你发一段文本,一张图片一个视频都要被审核代码确定一下是否是敏感内容,能不耗电🐎️
|
51
Nitroethane 2022-10-30 12:58:23 +08:00 via iPhone
@xtinput 为什么线程间通信比进程间通信的开销更大?
|
52
siweipancc 2022-10-30 13:05:59 +08:00 via iPhone
插,等技术分享
|
53
Nitroethane 2022-10-30 13:24:49 +08:00 via iPhone
@xtinput 怎么可能只有重启或者用户注销才释放,那内存管理是有多蠢。内核会根据内存压力动态管理这些用于缓存的内存,内存压力过大时这些内存完全可以收回再利用
|
55
lchynn 2022-11-05 14:27:49 +08:00
有没有这样的代理开源服务, 比如把微信部署在虚拟机中(云端),然后通过代理服务,把微信信息通知和群信息转发到其他节省资源的 IM APP 上,譬如 telegram ;
微信收到信息,转发到你自己的电报 channel 中, 你向这个 channel 的机器人发信息, 代理服务帮你转发到你的微信。 这样 iphone 上只要安装节省资源且安全的 im 就可以了。 |