Android调试程序技巧
3646 点击·0 回帖
![]() | ![]() | |
![]() | 开发的过程中我们经常需要调试程序的执行路径,如我们想知道一个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打印结果 ![]() 总结: 通过使用LogHelper的trace()方法,在调试的时候我们可以非常方便地打印应用的执行流程 ![]() | |
![]() | ![]() |