摘要:
1.使用Logcat跟踪查看Activity的生命周期。
2.使用Logcat跟踪查看Class的加载顺序。
3.使用Debug调试,跟踪代码。
内容:
1.Activity的生命周期。详情参考http://developer.android.com/guide/components/activities.html
2.创建一个Android工程,在MainActivity.java中加入重载的方法。
3.在Override/Implement Methods中选择要重写的方法,按OK就自动加入到代码。如果该方法已经被重写,则不会在该弹框中显示出来。
4.自动插入代码如下。在每段代码内使用Logcat方法输出内容,如果该方法被执行,将会从Logcat输出设置的内容。
5. 显示Logcat窗口,点击Windows->show View->Others,在弹框中找到Android->Logcat。
6. 连接上手机,运行程序。在Logcat窗口将会有log打出,有时可能没有log输出,那就把这个窗口关掉,然后再打开。输出的log信息很多,需要设置过滤。设置方法如下:
7. 运行程序,按Home键、按Back键,试一试log的输出,将会知道哪些方法被调用,调用过程对应Activity生命周期。
8.现在看一下类的加载顺序。编写如下测试代码。
package com.example.shengtest;
import android.util.Log;
public class NewClass {
{
Log.d(MainActivity.TAG, "非静态初始化调用...");
Log.d(MainActivity.TAG, "查看test赋值状态:test="+this.test);
}
String test="test";
{
Log.d(MainActivity.TAG, "非静态初始化调用...");
Log.d(MainActivity.TAG, "查看test赋值状态:test="+test);
Log.d(MainActivity.TAG, "查看MainActivity.TAG赋值状态:MainActivity.TAG="+MainActivity.TAG);
}
static {
Log.d(MainActivity.TAG, "静态初始化调用...");
}
public NewClass() {
Log.d(MainActivity.TAG, "构造函数调用...");
}
public static void staticTest(){
Log.d(MainActivity.TAG, "staticTesttest()函数调用...");
}
public void test(){
Log.d(MainActivity.TAG, "test()函数调用...");
}
}
9.在MainActivity中设置一个Button,按下Button调用该测试类。
package com.example.shengtest;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
public static final String TAG="Main";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate");
Button button=(Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
NewClass newClass=new NewClass();
newClass.test();
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG, "onRestart");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
10. 点击一次Button,查看输出,再点击一次,查看输出。
11.可以看到类加载顺序是:
12. Debug调试是跟踪程序非常有效的途径。如下为如何设置断点。
13. 打开Debug的显示窗口。
14. 设置断点,使用Debug as Android Application运行程序。
15. 查看logcat输出。
16. 使用debug运行时修改final成员变量。
17. 查看logcat,final 变量修改不生效。
18. 另外一种运行dubug方法,不需要重新编译工程。直接在已有的app上设置断点调试。通过DDMS设置。DDMS通过show view可以显示出来。
参考:
http://android.blog.51cto.com/268543/322518/
http://xys289187120.blog.51cto.com/3361352/657169