20190905-友商功能探查
机型 |
智能通知管理 |
深色省电皮肤 |
智能分辨率 |
关联启动或链式启动 |
蓝牙后台扫描功耗检测 |
后台频繁刷新检测 |
夜间关闭蓝牙 |
热点超时关闭 |
非交互场景省电 |
后台播放视频耗电检测 |
xxxx |
无 |
无 |
无 |
自启动管理 |
无 |
无 |
无 |
无 |
无 |
无(动态壁纸功耗分析) |
华为 P20 Pro |
灭屏后自动清理不重要的通知 |
界面改为深色,可能影响使用体验,开启后有助于省电 |
自动降低分辩率,有助于省电 |
统计自启动和拦截次数 统计xx启动xx时间 预置黑白名单 自启动拦截记录 |
后台蓝牙持续扫描(扫描超过2小时),耗电过快,建议关闭 |
后台频繁刷新,耗电过快 |
夜间广播蓝牙 |
有 |
无 |
无 |
小米 Mi 8 Pro |
无 |
无 |
无 |
是否允许系统唤醒 是否允许被其他应用唤醒 禁止耗电应用自启动 禁止耗电应用相互调用 |
无 |
无 |
无 |
有 |
通过多种传感器数据智能判断用户的非交互场景,在该场景下通知亮屏、呼吸灯、指纹、双击亮屏等会自动关闭,可减低误触和省电作用 |
无 |
OPPO RX17 |
无 |
无 |
无 |
禁止后台运行 智能限制后台运行 允许自动启动 自启动拦截记录 |
无 |
无 |
无 |
无 |
AI智能判断睡眠时段,在睡眠时让手机处于低功耗状态,更省电 |
无 |
机型 |
隐身立体声 |
智能通知管理 |
通知栏管理 |
健康使用手机 |
游戏模式 |
|||||
xxx |
无 |
无 |
无 |
无 |
无 |
|||||
华为 P20 Pro |
手机横屏时,将自动由高音质模式切换到立体声模式 |
分类识别应用通知并按通知重要性排序 |
应用下载、游戏中、聊天通知、精选通知、热门消息是否允许显示 |
1.设置屏幕使用的时间 2.限制应用的使用时间 3.睡眠模式屏幕变灰,变限制应用使用 |
有,日志中体现 |
|||||
小米 Mi 8 Pro |
无 |
无 |
无 |
无 |
有 |
|||||
OPPO RX17 |
无 |
无 |
无 |
无 |
有 |
省电功能点 |
功能介绍 |
更新日期 |
耗电详情 |
1.后台长时间蓝牙扫描检测-华为P20 Pro 2.后台应用频繁刷新检测-华为P20 Pro 3.后台长时间播放视频检测-动态壁纸Defect发现 4.可能需产品定义UI和交互 |
2019/8/1 |
夜间睡眠场景 (非交互场景) |
1.禁止通知亮屏-小米MI 8 Pro 2.禁止呼吸灯-小米MI 8 Pro 3.禁止指纹-小米MI 8 Pro 4.禁止双击亮屏手势体感-小米MI 8 Pro 5.关闭蓝牙-华为P20 Pro 6.可能需产品定义UI和交互 |
2019/8/1 |
通知栏管理 |
1.灭屏清理不重要的消息通知-华为P20 Pro 2.可能需产品定义UI和交互 |
2019/8/1 |
GPS 省电_1 |
华为 P20 Pro 1. 监听应用前台和后台变化; 2. 限制处于后台的黑名单应用的GPS使用; 3. 在GeofenceManager.updateFences()和GnssLocationProvider.updateRequirements()进行判断限制; 备注:使用本方法限制,状态栏的定位图标不会消失 |
2019/8/6 附表<GPS省电> |
WiFi热点扫描省电 |
华为 P20 Pro 1. 当 app 周期性调用 WifiManager.startScan() 时(扫描附近的WiFi热点信息); 2. 灭屏条件下Framework层 WifiServiceImpl.startScan() 进行拦截 OPPO F11 Pro 1. 当 app 周期性调用 WifiManager.startScan() 时(扫描附近的WiFi热点信息); 2. 灭屏条件下Framework层 WifiServiceImpl.startScan() 进行拦截 a. 黑名单应用,报告给OPPO守护精灵,下达kill指令 b. 白名单应用,统计扫描次数和间隔,达到阈值,进行拦截限制 |
2019/8/7 第一次调研 附表<WiFi热点扫描省电> 2019/9/5 第二次调研 Google在Android 9.0进行更加严格限制,故不需要再次优化 |
Sensor 省电 |
华为 P20 Pro 1. Sensor 类别只配置非唤醒类Sensor 2. 手机静止情况,应用不可见时达到1分钟,则禁止应用使用Sensor,即静止情况下,就不该继续使用Sensor,省电角度; 3. 应用被识别计步场景时,使用SENSOR_DELAY_UI或SENSOR_DELAY_NORMAL采样,则允许不可见时使用Sensor,保证计步应用类正常使用 4. 应用被识别计步场景时,使用SENSOR_DELAY_GAME或SENSOR_DELAY_FASTEST采样,则禁止不可见时使用Sensor,通俗理解:即使是计步行为,也不能太耗电; 5. 一旦处于可见状态,立刻恢复Sensor的正常使用 |
2019/8/14 附表<Sensor省电> |
GPS 省电_2 |
华为 P20 Pro 1.定位场景,Home键退到后台,状态栏的定位图标10秒内会消失 2.定位场景,最近任务回到前台,状态栏的定位图标恢复显示 3.导航场景,状态栏的定位图标一直显示,即允许一直定位 显示定位图标-SDK API:LocationManager.requestLocationUpdates 取消定位图标-SDK API:LocationManager.removeUpdates xx做过类似的,大体如下思路: 1.建立导航类型应用白名单 2.退到后台,注销应用的GPS监听注册 3.切换前台,重新给应用注册GPS监听 |
2019/8/21 |
华为Logcat 日志中发现下述一段日志,即灭屏下,华为禁止百度地图进行wifi 扫描 ``` 08-07 13:02:04.803 1171 9786 I WifiService: Screen is off, com.baidu.BaiduMap startScan is skipped. ``` 经过进一步研究和写wifi demo apk 验证, 并且能稳定复现,找到规律如下: 1. 当 app 周期性调用 WifiManager.startScan() 时(扫描附近的WiFi热点信息); 2. 灭屏条件下Framework层 WifiServiceImpl.startScan() 进行拦截; 同 WiFi模块 liqun 沟通,我们这边没有做这样的优化,liqun 说 OPPO 也有这样策略,具体如下: 1. 当 app 周期性调用 WifiManager.startScan() 时(扫描附近的WiFi热点信息); 2. 灭屏条件下Framework层 WifiServiceImpl.startScan() 进行拦截 a. 黑名单应用,报告给OPPO守护精灵,下达kill指令 b. 白名单应用,统计扫描次数和间隔,达到阈值,进行拦截限制; 风险点: liqun说 OPPO 提供黑白名单,主要是考虑灭屏下拦截热点扫描,亮屏时地图定位可能会有1、2秒的网络定位延时; =============================================================== 上层DEMO 调用逻辑 ``` @Override protected Void doInBackground(Void... arg0) { //扫描附近WIFI信息 for (int i= 0; i< 100; i++) { result = mUtils.getScanWifiResult(); Log.d(suhuazhi, startScan count + i); try { Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); } } return null; } public List<String> getScanWifiResult() { // 扫描的热点数据 List<ScanResult> resultList; // 开始扫描热点 mWifiManager.startScan(); resultList = mWifiManager.getScanResults(); ArrayList<String> ssids = new ArrayList<String>(); if (resultList != null) { for (ScanResult scan : resultList) { Log.d(suhuazhi, startScan scan.SSID : + scan.SSID); ssids.add(scan.SSID);// 遍历数据,取得ssid数据集 } } return ssids; } ``` 华为拦截日志如下: 08-07 14:53:49.486 1171 9805 D WifiService: startScan, pid:5354, uid:10029, appName:com.ldm.test 08-07 14:53:49.486 1171 9805 I WifiService: Screen is off, com.ldm.test startScan is skipped. =============================================================== |
2. 华为机器在灭屏下会有如下日志:
WifiService: Screen is off, com.baidu.BaiduMap startScan is skipped.
灭屏条件下,UID不为SYSTEM_UID,则调用startScan会被拦截
目前在Venice项目调研如下:
1 . Android 9.0 开始,对于 WifiManager.startScan 调研策略,Google进行如下调整
前台应用 2 分钟内只能使用 4 次startScan()
后台应用 30 分钟内只能调用 1次 startScan()
ScanRequestProxy
@VisibleForTesting
public static final int SCAN_REQUEST_THROTTLE_TIME_WINDOW_FG_APPS_MS = 120 * 1000;
@VisibleForTesting
public static final int SCAN_REQUEST_THROTTLE_MAX_IN_TIME_WINDOW_FG_APPS = 4;
@VisibleForTesting
public static final int SCAN_REQUEST_THROTTLE_INTERVAL_BG_APPS_MS = 30 * 60 * 1000;
我自己写了个WiFi Scan Demo 1 秒中调用1次 startScan,在第4次后,就无法调用了,实测亮屏待机电流和灭屏待机电流也都能很快降低到正常电流水平
2019-09-05 13:33:42.434 12500-12548/com.tct.wifiscandemo D/suhuazhi: startScan count 5
2019-09-05 13:33:42.438 1036-1152/? V/WifiScanRequestProxy: Foreground scan app request [10123, com.tct.wifiscandemo]
// 禁止前台应用进行WifiManager.startScan函数调用
2019-09-05 13:33:42.438 1036-1152/? I/WifiScanRequestProxy: Scan request from com.tct.wifiscandemo throttled
一、华为 Sensor 省电策略 |
|||
1. Sensor 类别只配置非唤醒类Sensor |
|||
2. 手机静止情况,应用不可见时达到1分钟,则禁止应用使用Sensor |
|||
3. 应用被识别计步场景时,使用 SENSOR_DELAY_UI或SENSOR_DELAY_NORMAL采样,则允许不可见时使用Sensor |
|||
4. 应用被识别计步场景时, 使用SENSOR_DELAY_GAME或SENSOR_DELAY_FASTEST采样,则禁止不可见时使用Sensor |
|||
5. 一旦处于可见状态,立刻恢复Sensor的正常使用 |
|||
二、华为 Sensor 省电现象 |
|||
使用Sensor Demo PhoneData.apk |
|||
1. 持 PARTIAL_WAKE_LOCK |
|||
2. 不停监听Sensor数据变化 |
|||
机器 |
PhoneData.apk |
||
使用 non wake-up sensor 采集数据 |
|||
华为 |
1.亮屏+应用可见,有数据; |
||
P20 Pro |
2. 亮屏+应用不可见+1分钟内,无数据; |
||
3. 灭屏+应用不可见+1分钟内,无数据; |
|||
4. 亮屏+应用不可见+不停摇一摇+SENSOR_DELAY_FASTEST,无数据 |
|||
5. 灭屏+应用不可见+不停摇一摇+SENSOR_DELAY_FASTEST,无数据 |
|||
6. 亮屏+应用不可见+不停摇一摇+SENSOR_DELAY_GAME,无数据 |
|||
7. 灭屏+应用不可见+不停摇一摇+SENSOR_DELAY_GAME,无数据 |
|||
8. 亮屏+应用不可见+不停摇一摇+SENSOR_DELAY_UI ,有数据 |
|||
9. 灭屏+应用不可见+不停摇一摇+SENSOR_DELAY_UI ,有数据 |
|||
10. 亮屏+应用不可见+不停摇一摇+SENSOR_DELAY_NORMAL,有数据,一旦检测为计步应用,即使静止也有数据 |
|||
11. 灭屏+应用不可见+不停摇一摇+SENSOR_DELAY_NORMAL,有数据,,一旦检测为计步应用,即使静止也有数据 |
|||
T1 |
1.亮屏+应用可见,有数据 |
||
2.亮屏+后台+至少10分钟以上,有数据 |
|||
3.灭屏+后台+至少10分钟以上,有数据 |
|||
Venice |
1. 亮屏+应用可见,有数据 |
||
2. 亮屏+后台+至少10分钟以上,有数据 |
|||
3. 灭屏+后台+至少10分钟以上,有数据 |
|||
Morgan 3G |
1. 亮屏+应用可见,有数据 |
||
2. 亮屏+后台+至少10分钟以上,有数据 |
|||
3. 灭屏+后台+至少10分钟以上,有数据 |
|||
上述发现如下: |
|||
华为 |
只有非唤醒类Sensor |
不可见+静止 |
采样率为SENSOR_DELAY_UI或SENSOR_DELAY_NORMAL,且被识别为计步,则允许使用Sensor,否则禁止 |
禁止使用Sensor |
|||
T1 |
唤醒类Sensor |
没有限制 |
没有限制 |
非唤醒类Sensor |
|||
三、Sensor 省电的详细分析 |
|||
1、 Sensor 列表区别 |
|||
1.1 华为 |
|||
SensorType: 1, Name: accelerometer-lsm6dsm, Description: {Sensor name=accelerometer-lsm6dsm, vendor=st, version=1, type=1, maxRange=78.4532, resolution=9.576806E-6, power=0.23, minDelay=2000} |
|||
只有非唤醒类Sensor,代码中使用SensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER, true/*表示唤醒类*/),会没有任何数据输出 |
|||
1.2 T1 |
|||
SensorType: 1, Name: lsm6ds3c Accelerometer Wakeup, Description: {Sensor name=lsm6ds3c Accelerometer Wakeup, vendor=STMicro, version=140549, type=1, maxRange=78.4532, resolution=0.0023928226, power=0.15, minDelay=2404} |
|||
SensorType: 1, Name: lsm6ds3c Accelerometer Non-wakeup, Description: {Sensor name=lsm6ds3c Accelerometer Non-wakeup, vendor=STMicro, version=140549, type=1, maxRange=78.4532, resolution=0.0023928226, power=0.15, minDelay=2404} |
|||
2、华为- 不可见+静止,则禁止使用Sensor |
|||
// 非重要通知识别 |
|||
2019-08-14 13:30:25.376 2134-2458/? I/hibernation: com.xiaomi.hm.health skips not important notification |
|||
// 拦截com.xiaomi.hm.health使用Sensor |
|||
2019-08-14 13:30:25.376 2134-2458/? I/APwPowerPolicy: ignore sensor about not never opt app: com.xiaomi.hm.health |
|||
// 冻结 com.xiaomi.hm.health |
|||
2019-08-14 13:30:25.398 2134-2458/? I/hibernation: Freeze com.xiaomi.hm.health OK ! |
|||
2019-08-14 13:30:25.404 2134-2458/? I/hibernation: close sockets >> com.xiaomi.hm.health, uids : [10311] |
|||
// 统计 com.xiaomi.hm.health,sensor: 0.09mAh, time: 527s |
|||
2019-08-14 13:30:25.855 2134-2247/? I/APwFeedback3: delta rank, uid: 10311, name: com.xiaomi.hm.health, current: 5mA, total: 0.17mAh. [cpu: 0.08mAh, time: 4s], [sensor: 0.09mAh, time: 527s] |
|||
// 识别无声音、无计步行为 |
|||
2019-08-14 13:30:25.868 2134-2247/? I/AppActAnalyzer: Pedometer pkg: com.xiaomi.hm.health, big current: 5, recent no sound, count step |
|||
3、SENSOR_DELAY_GAME或 SENSOR_DELAY_FASTEST,即使计步,也禁止使用Sensor |
|||
5 /** 56 * Typical sensor delay (sample period) in microseconds. 57 */ 58 // Fastest sampling, system will bound it to minDelay 59 static constexpr int32_t SENSOR_DELAY_FASTEST = 0; 60 // Typical sample period for game, 50Hz; 即1秒中打印50次,Sensor数据变化 61 static constexpr int32_t SENSOR_DELAY_GAME = 20000 ; 62 // Typical sample period for UI, 15Hz ; 即1秒中打印15次,Sensor数据变化 63 static constexpr int32_t SENSOR_DELAY_UI = 66667 ; 64 // Default sensor sample period,即1秒中打印5次,Sensor数据变化 65 static constexpr int32_t SENSOR_DELAY_NORMAL = 200000 ; |
|||
相关日志如下: |
|||
// sensor: 0.06mAh, time: 344s |
|||
2019-08-14 13:46:27.092 2134-2247/? I/APwFeedback5: delta rank, uid: 10309, name: com.tct.phonedata, current: 7mA, total: 0.24mAh. [cpu: 0.18mAh, time: 9s], [sensor: 0.06mAh, time: 344s] |
|||
//被识别为高耗电应用:常驻通知属性,华为日志太少,实测app确实无法监听Sensor数据了 |
|||
2019-08-14 13:46:27.105 2134-2247/? I/AppHighCurrentAnalyzer: has persist notification, add 5 threashold, pkg: com.tct.phonedata |
|||
4、应用可见时恢复使用Sensor |
|||
// 可见时恢复 |
|||
2019-08-14 13:58:55.094 2134-2458/? I/ash_trans: com.tct.phonedata { hibernation duration=86168 Uptime=86168 } transition to: running reason:visible |
|||
2019-08-14 13:58:55.098 2134-2247/? I/AppsUsage: scnOff:false FgAPP:com.tct.phonedata BgAPP:com.huawei.android.launcher |
|||
2019-08-14 13:58:55.114 2134-2458/? I/PGServer: report state:6 event type:2 pid:0 uid:10309 pkg:com.tct.phonedata to pid: 1252 |
|||
2019-08-14 13:58:55.114 2134-2458/? I/hibernation: Unfreeze com.tct.phonedata OK ! |
|||
2019-08-14 13:58:55.115 1252-2796/? I/PGManagerService: proxyBroadcast:[com.tct.phonedata] proxy:false |
|||
2019-08-14 13:58:55.167 2134-2458/? I/hibernation: unproxy com.tct.phonedata broadcast OK ! |
|||
2019-08-14 13:58:55.169 2134-2458/? I/hibernation: Unpending com.tct.phonedata alarm OK ! |
|||
2019-08-14 13:58:55.197 2134-2458/? I/hibernation: unproxy gps:com.tct.phonedata,uid:10309,result:true |
|||
2019-08-14 13:58:55.198 2134-2458/? I/hibernation: above launcher front pkgs: [com.tct.phonedata] |
20190905-友商功能探查相关推荐
- 2014 android 新技术,向友商学习 Android 12新功能前瞻:似曾相识
2月过半,春节假期结束,世界进入了"万物复苏"的阶段. 手机圈也是如此,更多搭载新芯片的手机将会陆续露面,占据移动操作系统市场71.93%份额的安卓也将迎来最新版本安卓12的开发者 ...
- 门禁信息推送不了服务器,MIUI下周推送新功能, 友商不要羡慕! 小米6/MIX2等可直刷门禁!...
原标题:MIUI下周推送新功能, 友商不要羡慕! 小米6/MIX2等可直刷门禁! 你的手机支持NFC吗?作为智能手机的附属功能,NFC功能很早前就已经出现.早在2005年,诺基亚就推出了第一款支持NF ...
- 华为麒麟990发布!余承东:全球首款旗舰5G SoC,业界最强手机AI算力,友商还都是PPT...
乾明 晓查 假装发自 柏林 量子位 报道 | 公众号 QbitAI 刚刚,华为发布新一代芯片,麒麟990 5G. 集成5G,AI算力更强,性能再提升. 在发布会上,余承东用六个"最&quo ...
- 惊喜不止小米9!小米又一4800万新机确认:不给友商机会?
最近小米9真的是火,不管是曝光还是预热都霸屏了微博数码等资讯圈,各种配置信息已经了解了90%,唯一不能确定的就是价格,据传低配或3499元起步,高配高达5000元,足以见得独立红米品牌之后小米真的坐上 ...
- 红米Redmi品牌独立后首发新品 雷军:『友商就不要用性价比这个词了』
小米的年关不好过.就在昨天(1月9日),小米集团发布公告,称雷军各控股股东自愿承诺未来365天不出售直接或间接实益拥有的公司股份,背景是小米的30多亿股限售股解禁,但是小米股价从发行价17港元跌至9. ...
- 25分钟破亿 首销火爆的moto edge X30给友商们出了个难题
12月9日,摩托罗拉召开moto edge系列手机新品发布会,推出了该系列全新机型--moto edge X30,并同步开启预售. 一.未发先"火"的moto edge X30 1 ...
- 华为鸿蒙系统前因后果,华为技术自救:鸿蒙系统开源,欢迎友商采用
众所周知,华为鸿蒙系统自从发布以来一直备受全球关注,从业内巨头到全球无数忠实用户.毕竟,一旦华为打造完成一套完整的生态体系,完全可能打破谷歌安卓.苹果在系统生态方面垄断的局面,形成全新的市场格局,因此 ...
- 鸿蒙系统安全模式,华为鸿蒙OS上线!开源开放毫无保留,这一友商早已用上鸿蒙同款系统...
华为鸿蒙OS上线!开源开放毫无保留,这一友商早已用上鸿蒙同款系统 十年磨一剑,华为鸿蒙终于正式发布,"一生万物,万物归一"就是对这个系统最好的诠释. 据余承东介绍,鸿蒙OS是一个分 ...
- 【随笔】从友商丢单看滤食生活
1. 什么是滤食性动物 我在<公有云成本危机>里强调进入严冬红海,但未来充满希望:很多朋友只看到了红海但没看到希望,我手头正好有个例子解释一下. 滤食性动物小的有磷虾大的有蓝鲸,简单的有海 ...
最新文章
- Netty 解决粘包和拆包问题的四种方案
- dedecms上传图片不自动改名,以利于seo图片优化
- LeetCode 213 House Robber II Python
- 九九乘法表_JAVA
- mysql中有没有单行函数_MySQL之函数(单行函数、分组函数)
- D-query SPOJ - DQUERY(主席树求区间中不同的数的个数)
- 大数据之-Hadoop3.x_Yarn_全流程作业---大数据之hadoop3.x工作笔记0143
- CentOS 7 安装 JAVA环境(JDK 1.8)
- 蓝桥杯2015年第六届C/C++省赛B组第二题-星系炸弹
- vue json对象转数组_Vue优秀表单组件,用Vue构建表单的最简单方法——Vue Formulate
- Java游戏开发——flappy bird
- linux系统tac命令,Linux tac命令的实现示例
- 树的左视图(Java)
- thinkpad T480s使用体验
- 如何使用repo管理本地私有仓库
- 1.1 什么是弹性盒子?
- python网络爬虫进入(一)——简单的博客爬行动物
- 这5种计算机视觉技术,刷新你的世界观
- 【游戏评测】赛博西行
- 网速慢?这8种方法可以彻底解决
热门文章
- python 读写表格_PYTHON与EXCEL:openpyxl 读写excel2007
- 前端工程师号称魔术师_使用graphql将rethinkdbs实时魔术带到前端
- 零基础进入java行业,我是怎么做到的
- 一张表格分成两页打印_一个表格在Word文档里被分成两页,要怎么合并为一页...
- 软件测试用例篇(4)
- linux添加触摸屏,Linux_Linux系统下触摸屏的简单使用和配置方法, 如果你装的是 Ubuntu 发行 - phpStudy...
- 苹果x充电慢是什么原因_苹果手机用久了以后充电会变慢,不充电是什么原因?...
- 你的视频是否是这样?优秀的视频作品,每个镜头时长不超过10s
- 【PR】剪辑音乐小知识
- 清华学霸讲计算机,清华学霸超强履历引膜拜 程序猿:这是学神啊