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处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Java Response返回值的最佳处理方案

《JavaResponse返回值的最佳处理方案》在开发Web应用程序时,我们经常需要通过HTTP请求从服务器获取响应数据,这些数据可以是JSON、XML、甚至是文件,本篇文章将详细解析Java中处理... 目录摘要概述核心问题:关键技术点:源码解析示例 1:使用HttpURLConnection获取Resp

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl