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

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级