android程序开发的调试方法有哪些,Android调试程序技巧

在开发的过程中我们经常需要调试程序的执行路径,如我们想知道一个Activity的生命周期方法的调用顺序,我们可能会写如下代码

Java代码

1. .....

2. public void onResume() {

3.     super.onResume();

4.     Log.d("Tag","onResume()");

5. }

6.

7. public void onStart() {

8.     super.onStart();

9.     Log.d("Tag","onStart()");

10. }

11.

12. public void onPause() {

13.     super.onPause();

14.     Log.d("Tag","onPause()");

15. }

16.

17. public void onStop() {

18.     super.onStop();

19.     Log.d("Tag","onStop()");

20. }

21.

22. ...

这样每次都要输入两个参数,有没有更简便的方法呢?

我们可以通过Thread.currentThread().getStackTrace()获取当前堆栈调用信息,从堆栈信息中可以获取当前调用的java文件名,类名,方法名和代码行号。

于是,我们封装了一个工具类LogHelper。我们只需要使用这个工具类,在跟踪的位置调用LogHelper.trace()方法就可以打印当前调用方法的信息。

例子:打印Activity的生命周期方法执行流程。

Loghelper.java代码

1. package cn.caiwb;

2.

3. import android.util.Log;

4.

5. public final class LogHelper {

6.     private static boolean mIsDebugMode = true;//获取堆栈信息会影响性能,发布应用时记得关闭DebugMode

7.     private static String mLogTag = "LogHelper";

8.

9.     private static final String CLASS_METHOD_LINE_FORMAT = "%s.%s()  Line:%d  (%s)";

10.

11.     public static void trace() {

12.         if (mIsDebugMode) {

13.             StackTraceElement traceElement = Thread.currentThread()

14.                     .getStackTrace()[3];//从堆栈信息中获取当前被调用的方法信息

15.             String logText = String.format(CLASS_METHOD_LINE_FORMAT,

16.                     traceElement.getClassName(), traceElement.getMethodName(),

17.                     traceElement.getLineNumber(), traceElement.getFileName());

18.             Log.d(mLogTag, logText);//打印Log

19.         }

20.     }

21. }

Loghelperactivity.java 代码

1. package cn.caiwb;

2.

3. import android.app.Activity;

4. import android.os.Bundle;

5. import android.util.Log;

6.

7. public class LogHelperActivity extends Activity {

8.     /** Called when the activity is first created. */

9.

10.

11.     @Override

12.     public void onCreate(Bundle savedInstanceState) {

13.         super.onCreate(savedInstanceState);

14.         setContentView(R.layout.main);

15.         LogHelper.trace();

16.     }

17.

18.

19.     @Override

20.     public void onStart() {

21.         super.onStart();

22.         LogHelper.trace();

23.     }

24.

25.     @Override

26.     public void onResume() {

27.         super.onResume();

28.         LogHelper.trace();

29.     }

30.

31.     @Override

32.     public void onPause() {

33.         super.onPause();

34.         LogHelper.trace();

35.     }

36.

37.     @Override

38.     public void onStop() {

39.         super.onStop();

40.         LogHelper.trace();

41.     }

42.

43.     @Override

44.     public void onDestroy() {

45.         super.onDestroy();

46.         LogHelper.trace();

47.     }

48. }

Log打印结果

9b7db695fe97846e4731d6909878fbd3.png

总结:

通过使用LogHelper的trace()方法,在调试的时候我们可以非常方便地打印应用的执行流程

619edee648dc46078b6eb8543f52de11.png

摘自  caiwb1990

http://www.dengb.com/Androidjc/541714.htmlwww.dengb.comtruehttp://www.dengb.com/Androidjc/541714.htmlTechArticle在开发的过程中我们经常需要调试程序的执行路径,如我们想知道一个Activity的生命周期方法的调用顺序,我们可能会写如下代码 Java代码...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值