http://blog.csdn.net/kesenhoo/article/details/7106785



你是否遇到过这样的情况?

写好一个AP之后,可能你会觉得哪个地方有点卡,可是又不清楚具体卡在哪里?

或者说程序开发到后期我们可以做一些performance tuning的动作来提升AP的用户体验。

那么应该如何查看AP每一执行步骤的耗时呢?Android自带的DDMS里面就可以满足你的需求


下面以之前博客里面的一个小例子分享下如何进行Performance的调优:

【0】程序示例源码:

主程序:

[java]  view plain  copy  print ?
  1. package com.kesen.hoo;   
  2.   
  3. import android.app.Activity;    
  4. import android.os.Bundle;    
  5. import android.view.View;    
  6. import android.view.View.OnClickListener;    
  7. import android.widget.Button;    
  8.     
  9. public class ActivityMain extends Activity    
  10. {    
  11.     private MyLogger logger = MyLogger.kLog();    
  12.     private MyLogger logger2 = MyLogger.jLog();    
  13.         
  14.     @Override    
  15.     protected void onCreate(Bundle savedInstanceState)    
  16.     {    
  17.         // TODO Auto-generated method stub    
  18.         super.onCreate(savedInstanceState);    
  19.         logger.i("This is log [01]");    
  20.         setContentView(R.layout.main);    
  21.             
  22.         Button button = (Button) this.findViewById(R.id.button);    
  23.         button.setOnClickListener(new OnClickListener() {    
  24.                 
  25.             @Override    
  26.             public void onClick(View arg0)    
  27.             {    
  28.                 // TODO Auto-generated method stub    
  29.                 logger2.i("This is James action button.OnClick");    
  30.             }    
  31.         });    
  32.     }    
  33.         
  34.     @Override    
  35.     protected void onResume()    
  36.     {    
  37.         // TODO Auto-generated method stub    
  38.         super.onResume();    
  39.         logger.d("This is kesen log [02]");    
  40.     }    
  41.         
  42.     @Override    
  43.     protected void onPause()    
  44.     {    
  45.         // TODO Auto-generated method stub    
  46.         super.onPause();    
  47.         logger.w("This is kesen log [03]");    
  48.     }    
  49.     
  50.     @Override    
  51.     protected void onStop()    
  52.     {    
  53.         // TODO Auto-generated method stub    
  54.         super.onStop();    
  55.         logger.v("This is kesen log [04]");    
  56.     }    
  57.         
  58.     @Override    
  59.     protected void onDestroy()    
  60.     {    
  61.         // TODO Auto-generated method stub    
  62.         super.onDestroy();    
  63.         logger.e("This is kesen log [05]");    
  64.     }    
  65. }    


Layout文件:

[html]  view plain  copy  print ?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <TextView  
  8.     android:id="@+id/textview"    
  9.     android:layout_width="fill_parent"   
  10.     android:layout_height="wrap_content"   
  11.     android:text="@string/hello"  
  12.     />  
  13. <Button  
  14.     android:id="@+id/button"    
  15.     android:layout_width="fill_parent"   
  16.     android:layout_height="wrap_content"   
  17.     android:text="@string/hello"/>  
  18. LinearLayout>  


这只是一个很简单的Android程序,主界面只包含了一个TextView与一个Button。


【1】如何Trace App 每一步骤的耗时:

见下图示意,点击开始之后,操作AP开始一些你需要检测的步骤,DDMS已经在记录数据,完成所需要的操作后点击同样的按钮,这个时候Eclipse会自动跳到记录的xxx.trace文件



下面就是自动显示的记录文件,最大化进行查看,请注意我图片上的注解:

这里其实我们可以看到一个AP的启动过程,从什么地方开始调用的,很是方便


上面的圈出的框中我们可以看到ActivityMain的OnCreate的总时间是34个Millisecond(毫秒),再点击SetContentView会看到花了31.423个Millisecond.而且我们有看到Parents与Childrens两个选项,从这个例子中看到OnCreate的主要耗时在于setContensView里面,如果是一个比较复杂的AP,这个Activity的layout元素比较多的,我们会花比较长的时间来做这个步骤,如果你发现这个步骤实在花费时间太多,比如好几百个Miliisecond的时候,我们需要考虑是不是可以把Layout进行优化,尽量减少layout的复杂度,这样会比较好。



写的不好,请多指教,谢谢!


你是否遇到过这样的情况?

写好一个AP之后,可能你会觉得哪个地方有点卡,可是又不清楚具体卡在哪里?

或者说程序开发到后期我们可以做一些performance tuning的动作来提升AP的用户体验。

那么应该如何查看AP每一执行步骤的耗时呢?Android自带的DDMS里面就可以满足你的需求


下面以之前博客里面的一个小例子分享下如何进行Performance的调优:

【0】程序示例源码:

主程序:

[java]  view plain  copy  print ?
  1. package com.kesen.hoo;   
  2.   
  3. import android.app.Activity;    
  4. import android.os.Bundle;    
  5. import android.view.View;    
  6. import android.view.View.OnClickListener;    
  7. import android.widget.Button;    
  8.     
  9. public class ActivityMain extends Activity    
  10. {    
  11.     private MyLogger logger = MyLogger.kLog();    
  12.     private MyLogger logger2 = MyLogger.jLog();    
  13.         
  14.     @Override    
  15.     protected void onCreate(Bundle savedInstanceState)    
  16.     {    
  17.         // TODO Auto-generated method stub    
  18.         super.onCreate(savedInstanceState);    
  19.         logger.i("This is log [01]");    
  20.         setContentView(R.layout.main);    
  21.             
  22.         Button button = (Button) this.findViewById(R.id.button);    
  23.         button.setOnClickListener(new OnClickListener() {    
  24.                 
  25.             @Override    
  26.             public void onClick(View arg0)    
  27.             {    
  28.                 // TODO Auto-generated method stub    
  29.                 logger2.i("This is James action button.OnClick");    
  30.             }    
  31.         });    
  32.     }    
  33.         
  34.     @Override    
  35.     protected void onResume()    
  36.     {    
  37.         // TODO Auto-generated method stub    
  38.         super.onResume();    
  39.         logger.d("This is kesen log [02]");    
  40.     }    
  41.         
  42.     @Override    
  43.     protected void onPause()    
  44.     {    
  45.         // TODO Auto-generated method stub    
  46.         super.onPause();    
  47.         logger.w("This is kesen log [03]");    
  48.     }    
  49.     
  50.     @Override    
  51.     protected void onStop()    
  52.     {    
  53.         // TODO Auto-generated method stub    
  54.         super.onStop();    
  55.         logger.v("This is kesen log [04]");    
  56.     }    
  57.         
  58.     @Override    
  59.     protected void onDestroy()    
  60.     {    
  61.         // TODO Auto-generated method stub    
  62.         super.onDestroy();    
  63.         logger.e("This is kesen log [05]");    
  64.     }    
  65. }    


Layout文件:

[html]  view plain  copy  print ?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <TextView  
  8.     android:id="@+id/textview"    
  9.     android:layout_width="fill_parent"   
  10.     android:layout_height="wrap_content"   
  11.     android:text="@string/hello"  
  12.     />  
  13. <Button  
  14.     android:id="@+id/button"    
  15.     android:layout_width="fill_parent"   
  16.     android:layout_height="wrap_content"   
  17.     android:text="@string/hello"/>  
  18. LinearLayout>  


这只是一个很简单的Android程序,主界面只包含了一个TextView与一个Button。


【1】如何Trace App 每一步骤的耗时:

见下图示意,点击开始之后,操作AP开始一些你需要检测的步骤,DDMS已经在记录数据,完成所需要的操作后点击同样的按钮,这个时候Eclipse会自动跳到记录的xxx.trace文件



下面就是自动显示的记录文件,最大化进行查看,请注意我图片上的注解:

这里其实我们可以看到一个AP的启动过程,从什么地方开始调用的,很是方便


上面的圈出的框中我们可以看到ActivityMain的OnCreate的总时间是34个Millisecond(毫秒),再点击SetContentView会看到花了31.423个Millisecond.而且我们有看到Parents与Childrens两个选项,从这个例子中看到OnCreate的主要耗时在于setContensView里面,如果是一个比较复杂的AP,这个Activity的layout元素比较多的,我们会花比较长的时间来做这个步骤,如果你发现这个步骤实在花费时间太多,比如好几百个Miliisecond的时候,我们需要考虑是不是可以把Layout进行优化,尽量减少layout的复杂度,这样会比较好。



写的不好,请多指教,谢谢!

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. 生成安卓证书keystor命令文件
  6. Android如何分析和研究Monkey Log文件
  7. android的带值跳转
  8. Android学习笔记1 ——资源 (一)
  9. Android(安卓)TTS学习——独特你的名字

随机推荐

  1. Android(安卓)生成keystore,两种方式
  2. android 打包 eclipse 错误 Export abort
  3. Android(安卓)Volley 库通过网络获取 JSO
  4. 强制结束Android进程
  5. android 解析json数据格式
  6. android GestureOverlayView
  7. 【Android】数据存储之SQLite
  8. Android(安卓)模仿QQ空间风格的 UI
  9. Suggestion: add 'tools:replace="androi
  10. Android开机广播和关机广播