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

猜你喜欢

转载自blog.csdn.net/yi_master/article/details/80083346