【Android】查看程序每个方法所花费的时间

来源:互联网 发布:java文件管理器源码 编辑:程序博客网 时间:2024/05/22 08:01

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的复杂度,这样会比较好。



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

0 0
原创粉丝点击