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

转:“苹果手机耗电快:因为流氓软件在偷电 — 月光博客”

  •  
  •   passerbytiny · 2019-01-10 13:08:17 +08:00 · 7835 次点击
    这是一个创建于 2152 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://www.williamlong.info/archives/5579.html

    我比较关心技术原理,请重点讨论这个

    54 条回复    2019-01-17 14:00:27 +08:00
    ShuoHui
        1
    ShuoHui  
       2019-01-10 13:14:32 +08:00 via iPhone
    我以为有什么干货
    CallMeReznov
        2
    CallMeReznov  
       2019-01-10 13:17:34 +08:00   ❤️ 8
    月光博客的东西现在还能看?
    passerbytiny
        3
    passerbytiny  
    OP
       2019-01-10 13:36:10 +08:00
    原理没人讨论吗? ios 这可是被人破了后台了。
    mydns
        4
    mydns  
       2019-01-10 13:41:33 +08:00
    是哪个流氓软件你倒是说啊
    hangvane
        5
    hangvane  
       2019-01-10 13:46:02 +08:00
    @mydns 盒马鲜生和携程旅游,文章里有
    v2chou
        6
    v2chou  
       2019-01-10 13:47:28 +08:00
    早上起来,发现我的 iPhone 电池的电量只有 4%了,但我记得昨晚睡觉前还有很多电量,这是怎么回事呢?是谁耗费了这么多的电量?

      于是赶快查询电池设置( iPhone-设置-电池),发现电量在 12 点之后,从 80%一直降到了 4%,全部都是盒马鲜生和携程旅游这两个应用在后台活动了一晚上,直到把电池损耗完,于是立刻把这两个应用删除了。

      我查看了一下 iPhone 的设置,APP 后台应用刷新功能是关闭的,按道理来说,应该不会有应用在后台刷新,这两个应用的通知功能也是关闭的,只有定位服务是打开的,可能这两个应用是通过定位服务以及蜂窝移动网络来耗电的。但令我感到奇怪的是,这两个应用我近期都没用过,也都没开通知功能,不知道他们是怎么从后台激活的。

    看来,晚上手机不开飞行模式还真是有风险,特别是在中国这种环境,某些国产 app 还真流氓,白天不活动,看上去挺老实的,专门等晚上 12 点后疯狂在后台折腾,做的事情还非常耗电,不知道干的都是什么勾当。

      备注一下 iPhone 查询偷电应用的方法:在 iPhone 里点击“设置-电池-过去 24 小时”,然后点击耗电量多的时间段,下面会显示应用名称。
    passerbytiny
        7
    passerbytiny  
    OP
       2019-01-10 13:49:12 +08:00
    @mydns #4 这是转载,我也没有额外的观点要添加,所以只放链接。
    SeanChense
        8
    SeanChense  
       2019-01-10 13:53:07 +08:00
    被定位唤醒了
    kera0a
        9
    kera0a  
       2019-01-10 13:53:14 +08:00 via iPhone
    原理原文里写了吧,定位权限选 始终 ,app 可以后台定位来运行代码
    w2er
        11
    w2er  
       2019-01-10 13:59:18 +08:00 via iPhone
    确认了一下,后台应用刷新全关,定位除了地图其他也都全不给
    finab
        12
    finab  
       2019-01-10 14:03:44 +08:00
    @w2er 定位选“仅运行期间”也行
    mobaui
        13
    mobaui  
       2019-01-10 14:05:41 +08:00
    原谅我去看了下。。。为什么我的盒马 只耗了 1%的电 leeear.com/ifiles/1.jpg leeear.com/ifiles/2.jpg
    notreami
        14
    notreami  
       2019-01-10 14:07:44 +08:00   ❤️ 1
    苹果手机耗电快,因为苹果舍不得扩电池容量。
    passerbytiny
        15
    passerbytiny  
    OP
       2019-01-10 14:12:49 +08:00
    @SeanChense #8
    @kera0a #9
    @SeanChense #10
    原文直接删了应用,压根没去找原因,只是个猜测。定位这个我看了开发文档,定位权限“始终”确实比较耗电,但是并不会阻止系统暂停应用,而是在位置变化时唤醒应用;然而睡觉的时候位置压根不会变化,唤醒次数有限,是达不到博文上那么大的耗电量的。
    passerbytiny
        16
    passerbytiny  
    OP
       2019-01-10 14:22:01 +08:00
    感觉 ios 这种后台是这样的:应用是单进程,只有前台、后台、暂停三种状态,满足特定条件就唤醒全部应用。这还真是够简单粗暴的。这样能制住乱开后台的应用,然而对于确实需要后台的应用,反而更浪费资源。
    hpeng
        17
    hpeng  
       2019-01-10 14:29:20 +08:00 via iPhone
    开局一张图
    helionzzz
        18
    helionzzz  
       2019-01-10 14:31:24 +08:00
    苹果手机耗电快,是因为苹果电池容量小
    SeanChense
        19
    SeanChense  
       2019-01-10 14:33:51 +08:00
    @passerbytiny 只要唤醒一次我就开始保活,你能怎么办?
    kera0a
        20
    kera0a  
       2019-01-10 14:50:25 +08:00 via iPhone
    @passerbytiny 没怎么用过始终这个权限,应该是你说的这种机制

    不过应该不会唤醒全部应用,只会唤醒注册位置服务等待接受位置变更信息,然后被挂起或被终止了的应用吧
    tvallday
        21
    tvallday  
       2019-01-10 14:52:05 +08:00 via iPhone
    @helionzzz iPhoneX 之后的容量不小了吧。不过变重了。
    passerbytiny
        22
    passerbytiny  
    OP
       2019-01-10 14:52:18 +08:00
    @SeanChense #19 这种情况应该不存在的。后台超长活跃,跟前台长期未响应一样,都是影响操作系统正常运行的危险因素,发现就要强杀进程的。这点控制要是没有做,苹果就成笑话了。
    passerbytiny
        23
    passerbytiny  
    OP
       2019-01-10 15:00:42 +08:00
    @kera0a #20 我在文档上没有看到注册额外服务的地方,目前看到的方式有两个——调用系统服务和注册唤醒来源,这种情况下,一唤醒,就是唤醒整个程序。
    DRcoding
        24
    DRcoding  
       2019-01-10 15:02:54 +08:00
    月光博客还没狗带啊,。。。就记得当时作者很多文章有浓烈的 ZZ 色彩就没有看过了。。。
    580a388da131
        25
    580a388da131  
       2019-01-10 15:04:48 +08:00 via iPhone
    月光的博客很在就废了
    66beta
        26
    66beta  
       2019-01-10 15:05:28 +08:00 via Android
    可能错怪人家了,可能
    苹果到了冬天,电池🔋要打对折
    elevens
        27
    elevens  
       2019-01-10 15:06:19 +08:00
    最近我也是发现 iPhone 掉电好快,以前基本一天一充,现在一天三充,而且待机耗电也很恐怖了,以前一晚上最多 3%左右,现在能掉 40%...
    mystrylw
        28
    mystrylw  
       2019-01-10 15:10:58 +08:00   ❤️ 2
    看了这个帖子我都不敢发帖问了
    因为我的盒马也在后台耗电,我的位置选项设置也是设置的使用程序时。

    为什么都不针对问题本身,而去针对提出问题的人?
    kera0a
        29
    kera0a  
       2019-01-10 15:12:20 +08:00 via iPhone
    @passerbytiny sorry 我看错了,我以为你说的是唤醒 全部的 应用。😄

    你说的是唤醒整个应用吧,唤醒就调用一次接口,而且有执行时间限制,浪费点内存,说不定执行完就被回收了。
    galenzhao
        30
    galenzhao  
       2019-01-10 15:16:26 +08:00
    @passerbytiny 播放一段空白音乐,
    就会被当成播放器 而不去 kill
    passerbytiny
        31
    passerbytiny  
    OP
       2019-01-10 15:29:56 +08:00
    @galenzhao #30 单纯在技术上是可行的,但是 ios 上敢这么用吗?
    helionzzz
        32
    helionzzz  
       2019-01-10 15:31:15 +08:00
    @tvallday XS 2658 Xr 2942 max 3174。。再加上祖传 5W 小水管。。。有的时候真的是佩服苹果用户,是真的能忍。
    kera0a
        33
    kera0a  
       2019-01-10 15:40:21 +08:00 via iPhone
    @helionzzz 国产安卓流氓软件忍的了 ,没道理 5w 充电头忍不了吧。买一个手机是综合考虑的,也没有完美的设备,每个人的喜好也不一样。5w 充电头没得洗,不过 max 和 xr 的续航很不错
    passerbytiny
        34
    passerbytiny  
    OP
       2019-01-10 15:55:30 +08:00
    @kera0a #29 我看文档,ios 的应用后台休眠,跟 windows uwp 的原理是一样的,是进程暂停,只释放 CPU 或者类似的计算资源,不释放存储资源。所以应用后台休眠后,是不释放内存资源的,唤醒也不影响内存。

    整个应用唤醒的方式,应用要想响应唤醒源,基本都要从入口重新进入,根据唤醒类型路由到具体的模块,再交给模块去执行。路由这一块要是优化不好,唤醒那一瞬间回很消耗 CPU,此时要是唤醒频率很高,有可能比常驻后台都更消耗 CPU。
    niuqiang139
        35
    niuqiang139  
       2019-01-10 16:02:31 +08:00 via Android
    很多品牌都有断崖式掉电
    helionzzz
        36
    helionzzz  
       2019-01-10 16:15:00 +08:00
    @kera0a 安卓流氓 APP 我可以选择不用,没什么大不了的。 但是电池这种硬件真的已经伤害到手机作为通讯工具甚至生活必需品的使用体验了,优化这种节流式操作始终有上限,让我们静看发展
    w2er
        37
    w2er  
       2019-01-10 16:27:23 +08:00 via iPhone
    @finab 嗯,高德现在是仅运行时,不导航还行,导航也是一个小时顶俩小时耗电
    kera0a
        38
    kera0a  
       2019-01-10 16:37:28 +08:00 via iPhone
    @helionzzz 流氓软件都躲着不用,被坑了就卸载的话,那你那句也可以改成 “佩服安卓用户,真的能忍” 了。

    xr/max 可以两天一充,相比较下我更能忍受电池问题
    Athrob
        39
    Athrob  
       2019-01-10 16:39:58 +08:00
    之前遇到一次 siri 电量全耗完的情况, 系统是 iOS 12 public beta 版
    kera0a
        40
    kera0a  
       2019-01-10 16:40:35 +08:00 via iPhone
    @passerbytiny
    没仔细研究过

    好像定位这个,整个程序会尽量不被杀。被杀后也不会被唤醒了

    其他例如推送 唤醒重新加载整个 app 的,都是从定义好的 AppDelegate 执行对应的方法
    Athrob
        41
    Athrob  
       2019-01-10 16:40:37 +08:00
    另外, v2 的图床好像故障了, 返回 500...
    ThirdFlame
        42
    ThirdFlame  
       2019-01-10 16:44:20 +08:00   ❤️ 1
    基本上是定位的问题。 有定位权限的程序 在后台运行 就会导致电量下降很快。 所以 没事儿就把后台的进程都退出了。 就 ojbk 了。
    kera0a
        43
    kera0a  
       2019-01-10 16:51:15 +08:00 via iPhone
    @kera0a 翻上面的文档看了下,应用被终止也会被重新唤醒
    SeanChense
        44
    SeanChense  
       2019-01-10 17:04:58 +08:00
    @kera0a significantmonitoring 可以被杀后唤醒。
    唤醒之后不断申请 backgroundtask 进行保活就行了。
    M0
        45
    M0  
       2019-01-10 17:09:52 +08:00
    设置-后台刷新-允许后台刷新关闭
    kera0a
        46
    kera0a  
       2019-01-10 17:14:10 +08:00 via iPhone
    @SeanChense 不行吧,主动申请的后台任务,是在从前台变到后台时申请的,有时间限制。之后就没机会申请了

    唤醒是被动等系统唤醒 app,App 自己不能主动做
    SeanChense
        47
    SeanChense  
       2019-01-10 17:20:46 +08:00
    @kera0a 我最近正在做,刚好把唤醒这步搞定了。持续保活还没做,到时候可以交流交流。
    kera0a
        48
    kera0a  
       2019-01-10 17:30:29 +08:00 via iPhone
    @SeanChense
    backgroundTask 肯定不行的,
    10 楼有文档,第一段就是,只能在前台申请一次

    Apps that start a short task in the foreground can ask for time to finish that task when the app moves to the background.
    samlee123
        49
    samlee123  
       2019-01-10 17:54:11 +08:00
    逆向一下這兩個 APP 不就知道了 還用猜麼。。。噗嗤
    Alexander321
        50
    Alexander321  
       2019-01-10 18:56:12 +08:00 via iPhone
    应该是 bug 了……推送权限不知道给没给,印象里推送唤醒可以跑 30 秒代码来着,业务没需求就没研究。之前接推送不记得哪家文档出的了…也可以后台播放一段没有声音的文件来避免被干掉……
    kingcos
        51
    kingcos  
       2019-01-10 19:02:03 +08:00 via iPhone
    保持后台的目的是什么?光保持后台的话,没有任何意义,冒着被下架的风险,我是不太信的
    passerbytiny
        52
    passerbytiny  
    OP
       2019-01-10 20:09:21 +08:00
    @kingcos #51 保不齐是要做一个隐藏功能,本身不费电,然而误伤了。我见过的程序开发过程,出现这种情况很正常。
    imaple
        53
    imaple  
       2019-01-10 21:07:05 +08:00
    下个携程和河马先试一下,明天再来评论
    galenzhao
        54
    galenzhao  
       2019-01-17 14:00:27 +08:00
    @passerbytiny 参看,联通营业厅,
    还有什么掌上云医院,
    你发现如果 iphone 在播放音乐时,打开了一个 app 或者一个 app 进后台了,音乐停了,
    基本上就是在干这事
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2825 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 12:03 · PVG 20:03 · LAX 04:03 · JFK 07:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.