android性能优化相关的开发工具备不少不少种,这里对以下六个工具作个简单的使用介绍,主要有Android开发者选项,分析具体耗时的Trace view,布局复杂度工具Hierarchy View,应用启动时间,Memory、CPU、Network分析,静态代码检查工具Lint以及程序稳定性monkey。下面就开始学习下这些工具吧。html
Andorid开发工具众多,首先就是手机自带的开发者选项了,至于手机怎么启动开发者选项,那么请自行百度或者google了,接着简单熟悉下各个选项:
java
一、Take bug report(进行漏洞报告): 点击这个选项会获取当前设备的log信息文件,打包并准备发送咱们想要发送的人。这会花费一、2分钟,而后会看到一个准备好的提示信息,而后能够点击发送。
二、Desktop backup password(桌面备份密码):可使用adb备份和存储app和他们的关联数据到你的电脑。这个选项强制须要一个密码备份和存储。
三、Stay awake(保持唤醒):选中这个复选框会强制屏幕唤醒,只要链接上usb线或者充电的时候都会不进入休眠,当须要调试的时候不用总是去解锁了,至关方便。
四、Select runtime(选择运行时):你能够选择Dalvik或者ART。ART仍然是实验性的,直到Android L才最终release。
五、Enable Bluetooth HCI snoop log(蓝牙HCI搜索日志):有时,开发者须要获取和分析蓝牙的HCI包,使能这个会在设备storage(路径为:/sdcard/btsnoop_hco.log)中保存包的信息。接着你可使用相似wireshark等软件分析。
六、Process stats(程序状态):你须要知道的全部运行在手机上的程序的任何信息。包括了ram使用量,运行时间等。
七、USB debugging(USB调试):USB调试时使用,使用DDMS和ADB命令的时候也须要这个使能,不勾选这个就不能调试咱们的应用了。
八、Revoke USB debugging authorizations(撤回USB除错受权):当第一次USB线链接电脑的时候,须要认证而且创建密钥,这个操做删除这个认证,强制从新来一遍。
九、Power menu bug reports(电源菜单中包括漏洞报告):在电源菜单中包括用于进行漏洞报告的选项。
十、Allow mock locations(容许虚拟位置):容许手动写入位置信息,对于须要模拟位置的应用来讲十分方便,能够干一些坏事,你懂得。
十一、Select debug app(选择待调试的应用程序):这个设置让你选择一个待调试的应用。
十二、Wait for debugger(等待调试程序):等待调试程序
1三、Show touches(显示触摸位置):显示触摸的位置,通常是一个小圈圈。
1四、Pointer location(显示指针位置):显示出当前位置的坐标。
linux
1五、Show surface updates(显示屏幕更新):屏幕更新时会闪烁。
1六、Show layout bounds(显示布局边界):显示剪切边界、边缘。
android
1七、Force RTL layout direction(强制RTL布局):界面布局从右至左。
1八、Window animation scale(窗口动画比例):窗口动画的比例,数字越小,速度越快。
1九、Transition animation scale(过渡动画比例):过渡动画的比例,同上。
20、Simulate secondary displays(模拟二级显示):容许开发者模拟不一样尺寸的表现。
2一、Force GPU rendering(强制GPU渲染):强制应用使用硬件2D渲染除非应用自己不须要。
2二、Show GPU view updates(显示GPU视图更新):任何用硬件GPU来绘制视图的会有红色的覆盖层。
2三、Show hardware layer updates(显示硬件层更新):这个设置会告诉你何时硬件层在更新。
2四、Debug GPU overdraw(调试GPU过分渲染):过分渲染发生在任什么时候候当应用请求系统绘制一些视图在其余视图之上的时候。
web
2五、Force 4x MSAA(启动4x MSAA):这个设置强制多重采样抗锯齿。MSAA就是寻找出物体边缘部分的像素,而后再把画缩放到当前的显示器上。会下降性能提高视觉的美感。
2六、Strict mode enabled(严格模式):应用程序在主线程上执行长时间操做屏幕会闪烁。
2七、Show CPU usage(显示CPU使用状况):在屏幕右上角显示当前CPU的信息。
sql
2八、Profile GPU rendering(GPU显示配置文件):这个设置能够在屏幕上显示也能够写入到文件中。
shell
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);
}
}
traceview有两种使用方法,一种是直接经过DDMS工具来start和stop trace,使用方法以下:
接着运行程序,成功运行后,点击菜单栏的Tools -> Android -> Android Device Monitor :
markdown
另外一种是经过注入代码来实现:
在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选择这个文件打开:
而后就能够查看分析了。经过代码的好处就是比较精确的获得咱们想要测试的,不过代价就是要写代码编译,导出来,步骤相对来讲比较繁琐。而直接使用工具的话只是一个大概的范围,可是方便快捷。能够视状况使用其中之一。
以前文章《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。
不少时候咱们须要了解app的内存使用状况,CPU占用怎样,网络速度如何。为了提升性能,咱们老是想把内存减小到最小,CPU占用率近可能小,网络状况适宜。固然这些能够用命令行实现,毕竟androd基于linux操做系统的,可是那样显得很麻烦又不是很直观,很庆幸Android Studio自带了功能。
Android Studio的Android Monitor里面有logcat和Monitors,选中monitors就有对于Memory,CPU和Network的展现。以下图所示:
Lint主要是提供一套静态代码分析的工具,它能够帮助咱们检查项目中存在的问题,让咱们更有规范性的开发App。运行菜单的analyze->Inspect Code。
经过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