Android vitals 简介

  • 谷歌推荐使用Android vitals来帮助开发者提高App的稳定性和性能表现。
  • 作为这个方案的一部分, Play Console提供了Android Vitals dashboard的早期测试版本。当被选中的用户运行App时,设备会记录大量的测试指标数据,包括app稳定性、渲染时间和电池使用数据。
  • Play Console统计这些数据并在dashboard中显示。
  • 这个dashboard将帮助开发者了解app的性能,而且当app的性能表现不好时,会发出相应的警告。

Android vitals 指标

  • ANR rates
  • Crash rates
  • Slow rendering
  • Frozen frames
  • Stuck partial wake locks
  • Excessive wakeups
  • Excessive background Wi-Fi scans
  • Excessive background network usage
ANRs
  1. 描述:UI线程如果被阻塞太长的时间, “Application Not Responding” (ANR) 就被触发。

    • 如果被阻塞的app处于前台,系统会显示一个ANR对话框。
  2. 触发:以下两个条件,任意各一个都会导致ANR

    • 当app处于前台时,在5s内无法相应用户输入或广播。
    • 当app没有activity处于前台时,广播接收器正在进行长时间的任务,且无法结束。
  3. 常见情况:长耗时计算、IO操作、锁竞争、死锁、慢广播处理。
Crashes

未经处理的异常或signal将会导致Crash。
- Java代码crash主要是Throwable类抛出的未处理异常
- Nativie代码crash主要是由未经处理的signal导致,比如SIGSEGV

Slow rendering
  • 为了保证UI交互的流畅,必须保证每帧的渲染时间不超过16毫秒,保证60的FPS。
  • 一旦界面有较慢的渲染,系统将强制跳帧,用户就会感觉到卡顿。
  • We call this jank. 我们把这种现象称为jank。
Frozen frames
  • 超过700毫秒渲染时间的帧,是slow rendering的极端情况。
  • 你的app将会在冻帧处卡顿,并且几乎整整一秒都无法响应UI。
  • 由于用户操作(比如滑动屏幕),app需要启动或切换场景,并布局和渲染所有屏幕中的view,使得渲染时间可能超过16ms。
  • 但无论如何,冻帧都不应当出现。系统会自动监控冻帧,并在 Android Vitals dashboard显示冻帧数据。
Stuck partial wake locks
  • 局部唤醒锁是PowerManager在屏幕关闭之后,保持cpu继续运行的机制。不管屏幕关闭是系统超时,还是用户按下了电源键。
  • app通过acquire()及Flag参数PARTIAL_WAKE_LOCK来请求局部环形锁。
  • 当app获得了局部唤醒锁,并长时间运行在后台(对于用户不可见),这个局部环形锁就会处于卡住(stuck)状态。
  • 如果局部唤醒锁长期处于卡住状态,将会加快耗尽电池,因为它会阻止系统进入低功耗模式。
  • 规范使用:当app需求时才获取局部唤醒锁,并在任务完成后尽快释放掉。
Excessive wakeups
  • 唤醒机制,是AlarmManager API 为了定时唤醒设备而设置闹铃的机制。
  • app通过AlarmManagerset()方法来设置闹铃,同时还需要选择RTC_WAKEUPELAPSED_REALTIME_WAKEUP作为FLAG。
  • 当闹铃触发时,设备从低功耗模式唤醒,而且当onReceive()onAlarm()运行时,将自动获取一个局部唤醒锁。
  • 过多地唤醒,将加快电量的损耗。
Excessive Wi-Fi Scanning in the Background
  • 每当后台执行WIFI扫描,将会唤醒CPU,导致电量损耗。
  • 如果多次执行WIFI扫描,电池寿命将会显著地降低。
Excessive background network usage
  • 当每app在后台连接移动网络,将会唤醒CPU并打开无线设备。
  • 频繁地连接移动网络,将会加快电量损耗。

---------------------

本文来自 崩豆 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/cangely/article/details/80504292?utm_source=copy

Android Vitals各性能指标介绍的更多相关文章

  1. Android四大基本组件介绍与生命周期

    Android四大基本组件介绍与生命周期 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器 ...

  2. Android Testing学习01 介绍 测试测什么 测试的类型

    Android Testing学习01 介绍 测试测什么 测试的类型 Android 测试 测什么 1.Activity的生命周期事件 应该测试Activity的生命周期事件处理. 如果你的Activ ...

  3. Xamarin Android教程Android基本知识版本介绍与系统介绍

    Xamarin Android教程Android基本知识版本介绍与系统介绍 Xamarin Android教程Android基本知识版本介绍与系统介绍,开发Andriod有时候不像iOS一样轻松,因为 ...

  4. Android系统架构说明介绍

    Android系统架构说明介绍 Android系统架构和一些普遍的操作系统差不多,都是采用了分层的架构,从他们之间的架构图看,Android系统架构分为四个层,从高层到低层分别是应用程序层.应用程序框 ...

  5. Android SQLite 数据库详细介绍

    Android SQLite 数据库详细介绍 我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用 ...

  6. 【转】Android 4.2蓝牙介绍

    原文网址:http://blog.csdn.net/innost/article/details/9187199 Tieto公司某蓝牙大牛写得<程序员>投稿文章 Android 4.2蓝牙 ...

  7. Android MVP模式 简单易懂的介绍方式

    主要学习这位大神的博客:简而易懂 Android MVP模式 简单易懂的介绍方式 https://segmentfault.com/a/1190000003927200

  8. Android HttpClient HttpURLConnection相关介绍

    Android HttpClient HttpURLConnection相关介绍 遇到一个问题 在android studio上用HttpClient编写网络访问代码的时候,发现该类无法导入并使用.. ...

  9. Visual Studio跨平台开发实战(4) - Xamarin Android基本控制项介绍

    原文 Visual Studio跨平台开发实战(4) - Xamarin Android基本控制项介绍 前言 不同于iOS,Xamarin 在Visual Studio中针对Android,可以直接设 ...

随机推荐

  1. Spring 控制器层如何调用DAO层

    1.写上注解 @Autowired 2.声明一个变量 private UserDao userDao; 3.注意!Spring里面数据库对象操作类不需要实例化就能调用

  2. PTA(Advanced Level)1067.Sort with Swap(0, i)

    Given any permutation of the numbers {0, 1, 2,..., N−1}, it is easy to sort them in increasing order ...

  3. [转帖]订购微软Windows 7延长支持服务的报价曝光 第三年要价两百美金

    订购微软Windows 7延长支持服务的报价曝光 第三年要价两百美金 cnbeta 年2月份的新闻 https://www.cnbeta.com/articles/tech/815885.htm 微软 ...

  4. [转帖]Vim全键盘操作

    https://www.cnblogs.com/pzqu/p/11416436.html Vim脱离鼠标第一步 平时不可缺少的会用到vim,但是避免不了鼠标,事实上,省略鼠标是完全可以的,没有想像中那 ...

  5. MySQL主从同步报错1507

    mysql 从库上手动删除partiton后,主库未做修改.后期主库上删除partiton后,出现问题. 故障现场 Last_Errno: 1507 Last_Error: Error 'Error ...

  6. Oracle数据库应用系统结构

    在安装.部署oracle数据库软件时,需要根据不同应用结构(即硬件平台.操作系统平台)采用不同的方法(基本安装.高级安装),下面介绍几种常见的应用结构. 1.应用系统的数据接口 客户端应用程序或应用服 ...

  7. (九)springMvc 的 post 提交乱码

    #post 提交乱码 在 web.xml 配置下 过滤器 : <!--解决 post 乱码问题,--> <filter> <filter-name>characte ...

  8. LibSVM格式简介

    对于训练或预测,XGBoost采用如下格式的实例文件: train.txt 1 101:1.2 102:0.03 0 1:2.1 10001:300 10002:400 0 0:1.3 1:0.3 1 ...

  9. python编程中常见错误

    python编程培训中常见错误最后,我想谈谈使用更多python函数(数据类型.函数.模块.类等)时可能遇到的问题.由于篇幅有限,我们试图将其简化,特别是一些高级概念.有关更多详细信息,请阅读学习py ...

  10. 判断Actiivty是否已经被销毁

    一般会遇到这样的情况:在一个Activity中启动一个异步任务,异步任务中需要返回值,然后被Activity使用,但是当异步任务还未结束时,按下home键,如果这个时候系统内存比较紧张,这个Activ ...