本文出自:http://blog.csdn.net/liao3841054/article/details/7162181
今天看了下文档,说TraceView 对程序的的性能和优化有很大的帮助:
本人比较懒,文章也没继续往下下看,直接百度了下TraceView 的使用技巧,资源很多,介绍怎么使用
推荐:http://blog.csdn.net/itachi85/article/details/6857324
当然具体怎么做的步骤简单的一下,大概分这么几步:
一:在创建avd ,给sd卡的内存大一点,因为后面的debug.raceView 生成的文件可能比较的大。
二:写一个测试的程序:
- Debug.startMethodTracing();
有开始当然必须有结束,如果不掉用Debug.stopMethodTracing(); 在sd卡的根目录上则不会出现dmtrace.trace 文件
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
- note:建议在onPuse()方法中调用Debug.stopMethodTracing ,不建议在ondestory() 或者onstop()方法中调用,因为有可能程序在莫名的情况下不一定会走ondestory,和onstop ,所以在onpuse中比较的靠谱
三: 运行前不要着急:记得给sd卡加权限 否则会抛权限异常的:
四: 生成了dmtrace.trace文件当然需要看了啊! 怎么看,google人性化,在android 开发工具中的 tools 中有个TraceView 工具只你只要
cmd 到该目录下,然后再把sd卡上的dmtrace.trace 文件导入到pc 的 某个路劲 (默认是的:c\dmtrace.trace)
然后执行:traceview C:\dmtrace.trace (自己的路劲哦)
物: 然后你就看打如下界面:
看到界面是不是晕了啊!:
这个咋看啊 ! 刚开始进来我也不知道看啥,也不知道怎么看,不懂百度:
原来:
- 在traceview的右半部统计字段中:
- Exclusive: 同级函数本身运行的时间Inclusive 就是说除统计函数本身运行的时间外再加上调用子函数所运行的时间
- Name:列出的是所有的调用项,前面的数字是编号,展开可以看到有的有Parent 和Children子项,就是指被调用和调用。
- Incl: inclusive时间占总时间的白分比
- Excl: 执行占总时间的白分比。
- Calls+Recur Calls/Total: 调用和重复调用的次数
- Time/Call: 总的时间。(ms)
- 是不是明白了些
本人还有个使用的心得,跟大家分享下: 就是你看到下面的数据这么多,又不知道看什么好时,最底下是不是有一个过滤栏,如果没有他你眼睛都会被晃瞎啊,因为数据太多了
好上面是简单的 TraceView 使用:
下面咋门用他来验证下,是不是有这么的神奇啊 !
不验证其他的就用他来验证我的Listview性能 ,这个问题很纠结我很长的一段时间了,因为listview优化网上给出了很多不同的版本和意见:
关于listView 优化的: http://www.cnblogs.com/over140/archive/2011/03/23/1991100.html
- package com.liao.listadpter;
- import java.util.ArrayList;
- import java.util.List;
- import android.app.ListActivity;
- import android.os.Bundle;
- import android.os.Debug;
- public class MainActivity extends ListActivity {
- private List<String> data;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- //setContentView(R.layout.main);
- Debug.startMethodTracing();
- initData();
- initadapter();
- }
- public void initData() {
- data = new ArrayList<String>();
- for (int i = 0; i < 1000; i++) {
- data.add("test: " + i);
- }
- }
- public void initadapter() {
- TestAdapter testAdapter = new TestAdapter(data, MainActivity.this);
- this.setListAdapter(testAdapter);
- }
- @Override
- protected void onPause() {
- // TODO Auto-generated method stub
- super.onPause();
- Debug.stopMethodTracing();
- }
- }
adapter 信息
- package com.liao.listadpter;
- import java.util.List;
- import org.w3c.dom.Text;
- import android.content.Context;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.TextView;
- public class TestAdapter extends BaseAdapter{
- private List<String> listData;
- private Context context;
- private LayoutInflater inflater;
- private LinearLayout layout;
- TestAdapter(List<String> listData ,Context context){
- this.listData =listData;
- this.context =context;
- inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
- }
- public int getCount() {
- // TODO Auto-generated method stub
- return listData.size();
- }
- public Object getItem(int position) {
- // TODO Auto-generated method stub
- return listData.get(position);
- }
- public long getItemId(int position) {
- // TODO Auto-generated method stub
- return position;
- }
- public View getView(int position, View convertView, ViewGroup parent) {
- // TODO Auto-generated method stub
- if(convertView ==null){
- layout = (LinearLayout) inflater.inflate(R.layout.listview, null);
- }
- else{
- layout = (LinearLayout) convertView;
- }
- int id= position %2==1? R.drawable.icon: R.drawable.default_head;
- ((ImageView) layout.findViewById(R.id.iamge)).setImageResource(id);
- ((TextView) layout.findViewById(R.id.text)).setText(listData.get(position));;
- // TextView text = (TextView) layout.findViewById(R.id.text);
- // ImageView view= (ImageView) layout.findViewById(R.id.iamge);
- //
- // text.setText(listData.get(position));
- return layout;
- }
- static class ViewHoder{
- public TextView text;
- public ImageView view;
- }
- }
下面是xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation ="horizontal"
- >
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="list 1"
- android:id ="@+id/text"
- android:layout_gravity = "center_vertical"
- />
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id ="@+id/iamge"
- android:src ="@drawable/icon"
- />
- </LinearLayout>
效果图: