首页 > 代码库 > Android开发学习之路--性能优化之常用工具
Android开发学习之路--性能优化之常用工具
??android性能优化相关的开发工具有很多很多种,这里对如下六个工具做个简单的使用介绍,主要有Android开发者选项,分析具体耗时的Trace view,布局复杂度工具Hierarchy View,应用启动时间,Memory、CPU、Network分析,静态代码检查工具Lint以及程序稳定性monkey。下面就开始学习下这些工具吧。
一、Android开发者选项
??Andorid开发工具众多,首先就是手机自带的开发者选项了,至于手机怎么启动开发者选项,那么请自行百度或者google了,接着简单熟悉下各个选项:
二、应用具体耗时工具Trace view
??Trace view用于查找程序运行时具体耗时在哪,它显示两个面板,一个是Timeline面板,描述每一个线程和方法启动和结束的时间。另一个是Profile面板,提供一个所有方法内部发生了什么的概要。
??先新建工程PerformanceTool,然后新建布局main_activity_layout.xml,一个按钮用来加载一个网页;另一个页面就是一个webview。
package com.jared.performancetool;
import android.databinding.DataBindingUtil;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import com.jared.performancetool.databinding.MainBinding;
public class MainActivity extends AppCompatActivity {
MainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
initView();
}
private void initView() {
binding.btnLoad.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
WebViewActivity.launch(MainActivity.this);
}
});
}
}
??接着是WebviewActivity.java:
package com.jared.performancetool;
import android.content.Context;
import android.content.Intent;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import com.jared.performancetool.databinding.WebViewBinding;
/**
* Created by jared on 2017/1/10.
*/
public class WebViewActivity extends AppCompatActivity {
WebViewBinding binding;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_webview_layout);
initView();
}
private void initView() {
binding.webView.loadUrl("http://www.hoolay.cn/ihoolay");
}
public static void launch(Context context) {
Intent intent = new Intent(context, WebViewActivity.class);
context.startActivity(intent);
}
}
1、view形式
??traceview有两种使用方法,一种是直接通过DDMS工具来start和stop trace,使用方法如下:
??接着运行程序,成功运行后,点击菜单栏的Tools -> Android -> Android Device Monitor :
2、代码形式
??另一种是通过注入代码来实现:
??在WebviewActivity的onCreate代码中加入两行代码如下:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_webview_layout);
Debug.startMethodTracing("perform");
initView();
Debug.stopMethodTracing();
}
??别忘了加上SD卡的读写权限,然后运行app,点击加载网页按钮,就会在/sdcard目录下生产perform.trace文件,通过adb pull可以把文件导出来。
? ~ adb pull /sdcard/perform.trace Downloads/
??这里导出到了Downloads目录下,然后通过AndroidMonitor的file->open file选择这个文件打开:
三、布局复杂度工具Hierarchy View
??之前文章《Android性能优化之布局》已经讲过了Hierarchy View的简单使用。这里还是继续讲解下怎么使用。Hierarchy View主要是检测布局复杂度,各视图的布局耗时情况的一个工具,它需要在模拟器上进行,真机好像也有方法解决,不过很懒没去折腾,主要还是学习工具为主嘛。
??点击菜单Tools -> Android -> Android Device Monitor:
四、应用启动时间
??一般我们都会比较关注一个app启动的时间,如果启动太慢了,用户可能就不想玩了,这里有个方法可以测试应用启动的时间:
??命令行如下:
adb shell am start -W packagename/activity
??这里举个例子,比如说是上述项目中的PerformaceTool app,那么首先打开终端,连接上usb线,然后终端输入:
? ~ adb shell am start -W com.jared.performancetool/.MainActivity
??等待会儿,app会启动,并且输出如下所示信息:
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.jared.performancetool/.MainActivity }
Status: ok
Activity: com.jared.performancetool/.MainActivity
ThisTime: 158
TotalTime: 158
WaitTime: 172
Complete
??如上所示可以看出用时158ms。
五、Memory、CPU、Network
??很多时候我们需要了解app的内存使用情况,CPU占用怎样,网络速度如何。为了提高性能,我们总是想把内存减少到最小,CPU占用率近可能小,网络情况适宜。当然这些可以用命令行实现,毕竟androd基于linux操作系统的,但是那样显得很麻烦又不是很直观,很庆幸Android Studio自带了功能。
??Android Studio的Android Monitor里面有logcat和Monitors,选中monitors就有对于Memory,CPU和Network的展示。如下图所示:
六、 静态代码检查工具Lint
??Lint主要是提供一套静态代码分析的工具,它可以帮助我们检查项目中存在的问题,让我们更有规范性的开发App。运行菜单的analyze->Inspect Code。
七、程序稳定性:monkey
??通过monkey对程序在提交测试前做自测,可以检测出明显的导致程序不稳定的问题,执行monkey只需要一行命令,提交测试前跑一次可以避免应用刚提交就被打回的问题。
? ~ adb shell monkey -p com.jared.performancetool -v 500
??-p表示包名,-v表示反馈级别 500就是500个伪随机事件
??若在压力测试中程序崩溃或者接收到任何失控异常,就会自动停止。
参考:
https://developer.android.com/studio/profile/traceview.html#traceviewLayout
http://www.jianshu.com/p/07b551ee260b
Android开发学习之路--性能优化之常用工具