Android下打印调用栈

在优化Android启动过程时,同事给出一种打印出调用栈的函数。分享一下

  1. java.util.Map<Thread, StackTraceElement[]> ts = Thread.getAllStackTraces();  
  2.   StackTraceElement[] ste = ts.get(Thread.currentThread());  
  3.   for (StackTraceElement s : ste) {  
  4.   android.util.Slog.e("SS     ", s.toString()); //这个是android自带的,如果没有,用其他的打印函数一样  
  5. }  

 

为了打印出在android启动时,Zygote启动的所有java应用。在

 

  1. //frameworks/base/services/java/com/android/server/am/ActivityManagerService.java  
  2. private final void startProcessLocked(ProcessRecord app,  
  3.         String hostingType, String hostingNameStr) {  
  4.         //debug add  
  5.         java.util.Map<Thread, StackTraceElement[]> ts = Thread.getAllStackTraces();  
  6.         StackTraceElement[] ste = ts.get(Thread.currentThread());  
  7.         for (StackTraceElement s : ste) {  
  8.             android.util.Slog.e("SS     ", s.toString());  
  9.         }       
  10.     }  

 

就可以在终端中使用命令

logcat来查看打印出的调用栈了

posted @ 2011-11-24 12:07  一根骨头棒子*熬的汤  阅读(592)  评论(0编辑  收藏  举报