Android Vitals各性能指标介绍
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
描述:UI线程如果被阻塞太长的时间, “Application Not Responding” (ANR) 就被触发。
- 如果被阻塞的app处于前台,系统会显示一个ANR对话框。
触发:以下两个条件,任意各一个都会导致ANR
- 当app处于前台时,在5s内无法相应用户输入或广播。
- 当app没有activity处于前台时,广播接收器正在进行长时间的任务,且无法结束。
- 常见情况:长耗时计算、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通过
AlarmManager
的set()
方法来设置闹铃,同时还需要选择RTC_WAKEUP
或ELAPSED_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各性能指标介绍的更多相关文章
- Android四大基本组件介绍与生命周期
Android四大基本组件介绍与生命周期 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器 ...
- Android Testing学习01 介绍 测试测什么 测试的类型
Android Testing学习01 介绍 测试测什么 测试的类型 Android 测试 测什么 1.Activity的生命周期事件 应该测试Activity的生命周期事件处理. 如果你的Activ ...
- Xamarin Android教程Android基本知识版本介绍与系统介绍
Xamarin Android教程Android基本知识版本介绍与系统介绍 Xamarin Android教程Android基本知识版本介绍与系统介绍,开发Andriod有时候不像iOS一样轻松,因为 ...
- Android系统架构说明介绍
Android系统架构说明介绍 Android系统架构和一些普遍的操作系统差不多,都是采用了分层的架构,从他们之间的架构图看,Android系统架构分为四个层,从高层到低层分别是应用程序层.应用程序框 ...
- Android SQLite 数据库详细介绍
Android SQLite 数据库详细介绍 我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用 ...
- 【转】Android 4.2蓝牙介绍
原文网址:http://blog.csdn.net/innost/article/details/9187199 Tieto公司某蓝牙大牛写得<程序员>投稿文章 Android 4.2蓝牙 ...
- Android MVP模式 简单易懂的介绍方式
主要学习这位大神的博客:简而易懂 Android MVP模式 简单易懂的介绍方式 https://segmentfault.com/a/1190000003927200
- Android HttpClient HttpURLConnection相关介绍
Android HttpClient HttpURLConnection相关介绍 遇到一个问题 在android studio上用HttpClient编写网络访问代码的时候,发现该类无法导入并使用.. ...
- Visual Studio跨平台开发实战(4) - Xamarin Android基本控制项介绍
原文 Visual Studio跨平台开发实战(4) - Xamarin Android基本控制项介绍 前言 不同于iOS,Xamarin 在Visual Studio中针对Android,可以直接设 ...
随机推荐
- ffmpeg学习笔记-native原生绘制
上次已将ffmpeg的动态库编译出来了,并且使用了ffmpeg的转码功能,成功将mp4格式视频转化为yuv视频,这篇文章基于上次测试的demo,使用surfaceview显示解码完成的像素数据 布局设 ...
- Java核心1(第三章)
3.6字符串 子串substring(a,b)方法 第二个参数是不想复制的第一个位置 可以从一个较大的字符串中提取一个子串 3.6.2拼接 Java允许使用+号链接两个字符串 3.6.3不可 ...
- linux 系统自签免费ssl证书和nginx配置
首先执行如下命令生成一个key openssl genrsa -des3 -out ssl.key 1024 然后他会要求你输入这个key文件的密码.不推荐输入.因为以后要给nginx使用.每次rel ...
- HanLP-地名识别调试方法
HanLP收词特别是实体比较多,因此特别容易造成误识别.下边举几个地名误识别的例子,需要指出的是,后边的机构名识别也以地名识别为基础,因此,如果地名识别不准确,也会导致机构名识别不准确. 类型1 数字 ...
- AndroidStudio布局编辑器强制刷新布局界面
用AndroidStudio布局编辑器编辑界面的时候,在selector里调整按钮的颜色,调整后的颜色经常无法实时显示在布局编辑器里,每次都重新运行程序查看界面又非常麻烦和低效,可以用以下方法解决: ...
- ssm+reids缓存整合
在说正文之前我们先介绍一下redis: redis是当今比较热门的非关系型数据库之一,他使用的是key-value的键值对来进行存储,是一个存在于内存之中的数据库,我们一般用于做数据缓存.当我们需要大 ...
- java中拦截器与过滤器之间的区别
过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法u ...
- DP的初级问题——01包、最长公共子序列、完全背包、01包value、多重部分和、最长上升子序列、划分数问题、多重集组合数
当初学者最开始学习 dp 的时候往往接触的是一大堆的 背包 dp 问题, 那么我们在这里就不妨讨论一下常见的几种背包的 dp 问题: 初级的时候背包 dp 就完全相当于BFS DFS 进行搜索之后的记 ...
- Python 基础(十六)--随机数模块
random随机数模块 random.randint(1,10):随机1-10包括10 random.randrange(1,10,2):在1.3.5.7.9中随机,类似切片,不包括10 random ...
- mysql数据库的锁表与解决办法(原博客url:http://www.cnblogs.com/wanghuaijun/p/5949934.html)
MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level loc ...