您的位置:首页 > 移动开发 > Android开发

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

2016-04-11 11:29 489 查看
/article/1423117.html

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

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

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

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

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

【0】程序示例源码:

主程序:

[java] view
plain copy

print?

package com.kesen.hoo;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class ActivityMain extends Activity

{

private MyLogger logger = MyLogger.kLog();

private MyLogger logger2 = MyLogger.jLog();

@Override

protected void onCreate(Bundle savedInstanceState)

{

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

logger.i("This is log [01]");

setContentView(R.layout.main);

Button button = (Button) this.findViewById(R.id.button);

button.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0)

{

// TODO Auto-generated method stub

logger2.i("This is James action button.OnClick");

}

});

}

@Override

protected void onResume()

{

// TODO Auto-generated method stub

super.onResume();

logger.d("This is kesen log [02]");

}

@Override

protected void onPause()

{

// TODO Auto-generated method stub

super.onPause();

logger.w("This is kesen log [03]");

}

@Override

protected void onStop()

{

// TODO Auto-generated method stub

super.onStop();

logger.v("This is kesen log [04]");

}

@Override

protected void onDestroy()

{

// TODO Auto-generated method stub

super.onDestroy();

logger.e("This is kesen log [05]");

}

}

Layout文件:

[html] view
plain copy

print?

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<TextView

android:id="@+id/textview"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"

/>

<Button

android:id="@+id/button"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"/>

</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?

package com.kesen.hoo;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class ActivityMain extends Activity

{

private MyLogger logger = MyLogger.kLog();

private MyLogger logger2 = MyLogger.jLog();

@Override

protected void onCreate(Bundle savedInstanceState)

{

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

logger.i("This is log [01]");

setContentView(R.layout.main);

Button button = (Button) this.findViewById(R.id.button);

button.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0)

{

// TODO Auto-generated method stub

logger2.i("This is James action button.OnClick");

}

});

}

@Override

protected void onResume()

{

// TODO Auto-generated method stub

super.onResume();

logger.d("This is kesen log [02]");

}

@Override

protected void onPause()

{

// TODO Auto-generated method stub

super.onPause();

logger.w("This is kesen log [03]");

}

@Override

protected void onStop()

{

// TODO Auto-generated method stub

super.onStop();

logger.v("This is kesen log [04]");

}

@Override

protected void onDestroy()

{

// TODO Auto-generated method stub

super.onDestroy();

logger.e("This is kesen log [05]");

}

}

Layout文件:

[html] view
plain copy

print?

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<TextView

android:id="@+id/textview"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"

/>

<Button

android:id="@+id/button"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"/>

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

写的不好,请多指教,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: