Android性能优化

Android性能优化

android性能优化学习笔记
主要从电量优化的角度来描述Android性能优化问题,主要从内存优化,布局优化,控件优化和网络优化等方面进行电量优化,根据Android的中文官方文档学习



性能优化

平时我们的应用可能会遇到一些情况,用一会app程序之后,手机的电量会很快就没。为了提高应用的用户体验,官方文档从三个方面简述了性能优化的特性。 官方文档

  • 耗电少。
  • 启动快。
  • 对用户互动响应迅速。

电量优化

分析电池用量

我们可以通过工具分析到,主要的耗电大户:

  1. cpu
  2. GPS(wifi,移动网络)
  3. 网络传输
  4. 系统唤醒

耗电:

  • 绘制图片,摆放布局等(25~30%电量)
  • 上报数据,检查位置信息,定时检索后台广告(70%左右电量)

使用 Batterystats 和 Battery Historian 分析电池用量

主要有两种方法:

  1. (通过科学上网直接查询)主要通过cmd(命令行)的方式生成一个文件,通过python工具转换成html文件,通过浏览器打开。
  2. 通过安装docker进行,详细步骤请看官方文档

常用的优化方案

核心工作电量优化

官方文档介绍

  • Android Vitals 是 Google 推出的一项计划,旨在改善 Android 设备的稳定性和性能。当选择启用了该计划的用户运行您的应用时,其 Android 设备会记录各种指标,包括应用稳定性、应用启动时间、电池使用情况、呈现时间和权限遭拒等方面的数据。Google Play 管理中心会汇总这些数据,并将其显示在 Android Vitals 信息中心内。

  • 该信息中心会突出显示以下指标,这些是开发者必须留意的 Android Vitals 核心指标:崩溃率、ANR 发生率、唤醒次数过多以及唤醒锁定被卡住等指标。。此外,对于您的应用或游戏类型适用的所有其他 Android Vitals 指标,您都必须予以监控,确保它们不会造成负面影响。如果 Android Vitals 中显示您的应用存在不良行为,可能会对其用户体验产生负面影响,并有可能导致应用在 Play 商店中的评分较低,而且可能不易被用户发现。

简而言之,就是耗电量大户的。

主要通过下面四个方面来进行优化:

  1. 内存优化(GC)
  2. 布局优化(卡顿)
  3. 控件优化(自定义控件,过渡绘制)
  4. 网络优化

辅助工作电量优化

官方文档介绍

  • 让应用变得“偷懒至上”。
  • 充分利用可帮助您管理应用耗电量的平台功能。
  • 使用可帮助您找出耗电源头的工具。
  1. 减少操作:您的应用是否存在可删减的多余操作?例如,是否可以缓存已下载的数据,而不是反复唤醒无线装置来重新下载数据?
  2. 推迟操作:应用是否需要立即执行某项操作?例如,是否可以等到设备充电后再将数据备份到云端?
  3. 合并操作:工作是否可以批处理,而不是多次将设备置于活动状态?例如,是否真的有必要让数十个应用分别在不同时间打开无线装置发送消息?是否可以改为在无线装置单次唤醒期间传输消息?
  • 批处理请求
  • 优化定位的方式(gps,移动网络,wifi) 比如一个外卖app应用,由于离信号的地方不相同,wifi:10m 移动网络:100m GPS:太空(更远)。耗电程度wifi<移动网络<GPS。 由于地址一般是在室内,GPS定位不一定准确,一般通过收货地址来解决。所以这时我们可以采取用wifi和移动网络来代替GPS
  • 优化定位方式(定位时间间隔)例如:在导航时(步行,骑行,驾车),会根据目的地开始定位,可以减少定位次数从而省电,(由于驾车可充电,减少一定的次数)直行路段的话减少定位。而到交通路口和起步时定位。开启和关闭定位应同时出现。什么时候到交通路口定位,可以根据传感器(方向和距离)即速度和距离,大致计算出大致要定位的时间。

优雅的在应用中植入广告—用户体验

  • 弱化或软化广告植入
  • 用户数据采集(用户画像),精准投放广告 (条目中有交叉按钮,减少某些关键字的推荐)
  • 等等

终极方案

将任务放到用户充电时处理

常见API介绍

Wakelock

Wakelock使用官方文档
唤醒 cpu ,屏幕灰色还是高亮和键盘等

需要权限

android.permission.WAKE_LOCK

一般在onResume方法中通过PowerManager(获取系统服务电量管理者)调用newWakeLock(int levelAndFlags, String tag)获取锁,通过acquire()获取锁

PowerManager pm = (PowerManager)mContext.getSystemService(
                                          Context.POWER_SERVICE);
 PowerManager.WakeLock wl = pm.newWakeLock(
                                      PowerManager.SCREEN_DIM_WAKE_LOCK
                                      | PowerManager.ON_AFTER_RELEASE,
                                      TAG);
 wl.acquire();
 // ... do work...
 wl.release();

在onPause()方法中释放锁。(release()😉

用户充电状态判断

利用广播判断

JobSchduler

JobSchduler使用官方文档

时间控制
每隔一段时间执行
延时执行
事件控制
网络状态
充电状态
设备空闲状态

Doze and App Standby

低电耗模式和应用待机模式官方文档
从 Android 6.0(API 级别 23)开始,Android 引入了两项省电功能,通过管理应用在设备未连接至电源时的行为方式,帮助用户延长电池寿命。当用户长时间未使用设备时,低电耗模式会延迟应用的后台 CPU 和网络活动,从而降低耗电量。应用待机模式会延迟用户近期未与之交互的应用的后台网络活动。

当设备处于低电耗模式时,应用对某些高耗电量资源的访问会延迟到维护期。电源管理限制中列出了具体的限制。

低电耗模式和应用待机模式管理在 Android 6.0 或更高版本上运行的所有应用的行为,无论它们是否专用于 API 级别 23。为确保用户获得最佳体验,请在低电耗模式和应用待机模式下测试您的应用,并对您的代码进行必要的调整。下面几部分提供了详细信息。

Doze (低电耗模式)

设备长时间处于闲置状态时,推迟应用的后台,cpu,网络,activity等来减少电耗。

条件:screen off stationary on battery

一个用户停止充电
关闭屏幕
on battery
screen off
stationary手机处于静止

保持以上状态一段时间会进入Doze模式(瞌睡模式即先慢慢响应,等几分钟响应,再到几小时影响)。所以一般时社交类App需要重视者特性

在maintenance window中,cpu可访问网络。

一旦条件不满足,会恢复到正常模式。

进入Doze模式出现以下情况:

  • 暂停访问网络。
  • 系统忽略唤醒锁定。
  • 标准 AlarmManager 闹钟(包括 setExact() 和 setWindow())推迟到下一个维护期。
  • 如果您需要设置在设备处于低电耗模式时触发的闹钟,请使用 setAndAllowWhileIdle() 或 setExactAndAllowWhileIdle()。
  • 使用 setAlarmClock() 设置的闹钟将继续正常触发,系统会在这些闹钟触发之前不久退出低电耗模式。
  • 系统不执行 WLAN 扫描。
  • 系统不允许运行同步适配器。
  • 系统不允许运行 JobScheduler。

所以(社交类app)需添加应用到电池优化白名单列表来解决问题。

  • 如果可能,请使用 FCM 进行下游消息传递。(根据手机类型进行相关的推送)
  • 如果您的用户必须立即看到通知,请务必使用 FCM 高优先级消息。(根据手机类型进行相关的推送)
  • 在初始消息负载中提供足够的信息,这样随后就无需访问网络。
  • 使用 setAndAllowWhileIdle() 和 setExactAndAllowWhileIdle() 设置重要闹钟。
  • 在低电耗模式下测试您的应用。
App Standby (应用待机模式)

延缓最近未被使用的app对网络请求

应用待机模式允许系统判定应用在用户未主动使用它时是否处于闲置状态。当用户有一段时间未触摸应用时,系统便会作出此判定,以下条件均不适用:

  • 启动该App
  • app有前台进程
  • 生成notification
  • 插入电源

除了GCM(谷歌外)其他推送需进行单独的测试

总结

先通过电量的查询,看出那些是耗电大户,根据那些是这些大户,给出一定的性能优化的建议,在往后的过程,一步一步的解决这些问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值