Android P版本 新功能介绍和兼容性处理(四)Android Profiler

2024-02-29 04:50

本文主要是介绍Android P版本 新功能介绍和兼容性处理(四)Android Profiler,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Android Studio使用Android Profiler取代了Android Monitor,通过这些工具我们可以对网络,CPU,内存,代码进行分析,提高项目质量,通过点击如下按钮即可打开Android Profile
这里写图片描述
或者你也可以通过点击 View > Tool Windows > Android Profiler 来打开Android Profile


当我们点击Android Profile之后,会弹出选择模拟器的界面,如下
这里写图片描述
当选择已连接的设备之后,点击OK,稍后就会进入到Android Profile页面,页面如下图所示
这里写图片描述
可以看到我们无法在当前线程中进行分析,那就点击Run Configuration吧,配置界面如下,勾选 enable advanced profiling 复选框即可
这里写图片描述
当然在打开这个配置页面之后,每个人的环境和grade是不一样的,那肯定遇到的问题也有很多,别着急,按照他的提示进行配置就好,比如有的人无法勾选复选框,那是因为gradle插件版本太低,需要2.4以上版本才可以,那就更新下gradle;

当我们配置好之后,我们重新点击Android Profile图标,刷新下,刷新后的界面如下
这里写图片描述

可以发现左边的session区表示每次打开Android Profile的session,你可以通过点击上面的红色方块关闭你不需要的session;也可以通过下图选择进程来开启一个Android Profile调试
这里写图片描述

我们通过加号按钮来创建Android profile,如图所示
这里写图片描述

我们也可以通过右边区域的CPU, MEMORY , NETWORK来进行不同的检查


我们先来看下 利用 Network Profiler 检查网络流量,选择NETWORK之后的页面如下
这里写图片描述

1)首先先说下为什么要进行网络分析
设备在请求网络连接的时候,是需要依靠WIFI装置或者高功耗的移动来收发数据,无线装置不仅要消耗电力来传输数据,还需要消耗额外的电力来开启并且不锁定屏幕。通过Network分析,我们可以检查网络请求峰值,也可以针对性的使用wakelock来减少电量消耗;总的来说进行网络分析的目的有
a: 检测app使用网络情况,针对各种情况进行网络优化
b: 节约电源

在上图中,我们可以在时间线中选择对应的时间片段来进行详细分析,查看发送和接收的文件列表,或查看有关所发送或接收的选定文件的详细信息,这些操作的前提是开启“高级分析”,其开启步骤如下:

->选择 Run > Edit Configurations。
->在左侧窗格中选择您的应用模块。
->点击 Profiling 标签,然后勾选 Enable advanced profiling。
如下图,点击ok便开启了高级分析功能
这里写图片描述

那高级分析功能到底可以分析什么了?其实从上图的“Enable advaced…”下面的解释就能很清楚的看到了

注:对于原生代码,不可使用高级分析功能。 如果您的应用是纯原生应用(不含 Java Activity 类),则不可使用高级分析功能。 如果您的应用使用了 JNI,则可使用部分高级分析功能,例如 Event 时间线、GC Event、Java 分配对象和基于 Java 的网络 Activity,但不能检测基于原生的分配和网络 Activity。

当我们开启了“高级分析”之后,就可以在时间线先选择一段时间进行具体分析

如下图
这里写图片描述

最主要的有区域2和区域4,其中
区域2我们可以选择对应时间段来查看具体的网络请求
区域4我们可以查看具体请求的消息头和消息体

但是你会发现并不是所有的网络请求都能区域2中显示,这是因为目前Network Profiler 只支持 HttpURLConnection 和 OkHttp 网络连接库;

我们在看下Network Profile中其他几个按钮的作用
这里写图片描述

我们知道区域2是时间线区域,时间线是不断滚动的,其中点击上图中的4即可暂停时间线,点击1和2分别表示缩小和扩大时间线,点击3是恢复时间线区域;

网络请求可以来自用户操作,也可能来自应用程序代码的请求或来自与您的应用程序通信的服务器。我们通过DDMS的Network Traffic tool能够查看应用程序如何以及何时进行网络传输数据。

之前我们说到利用好网络分析工具,我们可以更好的节省网络耗电量,那么我们该如何做?

第一招:收集网络流量数据
标记网络请求来自哪里,针对请求来源来分析,可以更好的提高网络资源利用率,无外乎三种类型
1)用户自己的请求:如更新某一个页面
2)应用程序自己的请求:如新闻页面中缓存未读文章的请求
3)来自服务器网络请求:如服务器向应用程序发起的推荐图书列表请求

为了测试优化网络流量,我们肯定要写一些测试代码,请注意这些分析代码务必不得放入生成环境apk中,同时并不是所有的网路都支持TrafficStates类
google develop中有可能建议你构建network-test,其实这个只是为了在发布版本中删除测试代码罢了,我们没有必要完全照搬google的代码

The Network Traffic工具会用三种颜色来区域上述三种操作类型,那该如何标记网络请求类型尼

1)定义三个变量,分别表示来自用户,App,服务器的网络请求

public static final int USER_INITIATED = 0x1000;
public static final int APP_INITIATED = 0x2000;
public static final int SERVER_INITIATED =0x3000;

2)找出你项目中进行网络请求的代码,无外乎HttpUrlConnection,httpclient,okhttp等,添加如下测试代码

    /*** 执行HTTP请求*/public final void exec() {if (Build.VERSION.SDK_INT >= 14) {try {TrafficStats.setThreadStatsTag(MiGuTvBillingMain.USER_INITIATED);// make network request using HttpClient.execute()} finally {TrafficStats.clearThreadStatsTag();}}}

3)打开DDMS, 进入DDMS页面;
3.1)选择Network Statistics。 尝试Window > Reset Perspective操作
3.2)在Network Statistics tab中选择要调试的应用程序,然后单击开始按钮。
3.3)使用以下adb命令清除应用程式数据:

 adb shell pm clear package.name.of.app

随着Android Studio的升级,很多工具都被替代了,比如DDMS就被Android profile替代,那在3.1和3.2版本中,有哪些工具被替代了?参见如下表
这里写图片描述

下面看下如何打开DDMS

在Android Studio窗口的Temminal中执行如下命令即可
这里写图片描述
稍等片刻,你就可以看到DDMS启动了,有的时候你启动DDMS会发现如下问题
这里写图片描述
很明显8700端口被占用了,估计是你开了两个IDE,如此处我开了eclipse和android studio,8700端口被eclipse占用了;
解决方法也很简单,关闭模拟器,重启即可

每个设备一次只能连接到一个调试器进程。 因此,如果您使用Android Studio在设备上调试您的应用程序,则需要从Android设备监视器附加调试器进程之前断开Android Studio调试器与设备的连接。

3.4)启动应用程序

如果操作成功,你就可以看到如下页面
这里写图片描述

此时我们就能很清楚的看到三种不同的请求类型;通过这张图,我们就可以做第二步优化动作了

第二招:分析上图中的各种流程使用情况
        应用程序有效地访问网络,可以看到它通过网络进行的通信紧密组合在一起,间隔时间很长,应用程序没有连接请求。
这里写图片描述
上图展示的是一个次优的app,他显示了app正在频繁的使用网络,网络没有休息时间,这就意味着app在不断消耗电量;
这里写图片描述
这张图展示就是一个优化后的app使用网络的情况,可以看出优化后的网络将连发式进行网络请求改为分段式,这样CPU就能得到休眠的机会,提高了电池的使用时间

第三招:分析用户行为使用的流量
        分析用户的网络流量的目的是查看其使用网络的情况,并尝试创建或增加网络未访问的时间段,以加速app对用户的响应度;以下方法可以优化用户的网络请求
1)预测用于行为:即app预估用户行为,在一次请求中集中请求多个数据
2)在发起请求前检查网络的连接性和监听网络状态切换
3)减少连接数量,即重用现有网络连接,这个比启用新的网络连接更有效

第四招:分析App使用流量,如下有几个方法可以提高app测网络请求
1)批量进行网络请求,我们可以推迟网络处理,在某一时间段内集中处理这些请求,以提高电池使用率,这是因为在移动设备上,打开wifi或者3/4G,建立连接并保持唤醒的过程需要大量电源消耗。对于如何发起集中式的请求,可以有如下三个方案参考
这里写图片描述
2)允许系统检查连接性

第五招:分析服务端主动发送给客户端的网络情况
这个需要用到google的GCM,这里就不分析了,原因你懂得


至于CPU和MEMORY Profile请参考如下链接

参考链接
NetWork Profile
Memory Profile
CPU Profile
Device Monitor

这篇关于Android P版本 新功能介绍和兼容性处理(四)Android Profiler的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/757630

相关文章

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

Golang如何用gorm实现分页的功能

《Golang如何用gorm实现分页的功能》:本文主要介绍Golang如何用gorm实现分页的功能方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景go库下载初始化数据【1】建表【2】插入数据【3】查看数据4、代码示例【1】gorm结构体定义【2】分页结构体

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,