Android偵錯工具技巧

來源:互聯網
上載者:User

在開發的過程中我們經常需要偵錯工具的執行路徑,如我們想知道一個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()方法,在調試的時候我們可以非常方便地列印應用的執行流程

  



摘自  caiwb1990
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.