Android JAVA源码之打印调用栈
来源:互联网 发布:企业网络推广方案 编辑:程序博客网 时间:2024/06/14 10:45
Android JAVA源码之打印调用栈
以PowerManagerService中的一段代码为例:
private boolean wakeUpNoUpdateLocked(long eventTime, String reason, int reasonUid, String opPackageName, int opUid) { if (DEBUG) { StackTraceElement[] stack = new Throwable().getStackTrace();//输出wakeUpNoUpdateLocked的调用栈 for (StackTraceElement element : stack) { Slog.d(TAG, " |----" + element.toString()); } } if (DEBUG_SPEW) { Slog.d(TAG, "wakeUpNoUpdateLocked: eventTime=" + eventTime + ", reason=" + reason + ", uid=" + reasonUid); } if (reason == PowerManager.WAKE_UP_REASON_SHUTDOWN) { synchronized (mLock) { mShutdownFlag = false; Slog.d(TAG, "mShutdownFlag = " + mShutdownFlag); mDirty |= DIRTY_SETTINGS; updatePowerStateLocked(); return true; } } if (eventTime < mLastSleepTime || mWakefulness == WAKEFULNESS_AWAKE || !mBootCompleted || !mSystemReady) { return false; } Trace.traceBegin(Trace.TRACE_TAG_POWER, "wakeUp"); try { switch (mWakefulness) { case WAKEFULNESS_ASLEEP: Slog.i(TAG, "Waking up from sleep (uid " + reasonUid +")..."); break; case WAKEFULNESS_DREAMING: Slog.i(TAG, "Waking up from dream (uid " + reasonUid +")..."); break; case WAKEFULNESS_DOZING: Slog.i(TAG, "Waking up from dozing (uid " + reasonUid +")..."); break; } mLastWakeTime = eventTime; setWakefulnessLocked(WAKEFULNESS_AWAKE, 0); mNotifier.onWakeUp(reason, reasonUid, opPackageName, opUid); userActivityNoUpdateLocked( eventTime, PowerManager.USER_ACTIVITY_EVENT_OTHER, 0, reasonUid); } finally { Trace.traceEnd(Trace.TRACE_TAG_POWER); } return true; }
先附上日志截图,避免排版错乱。
文本日志
07-12 04:25:24.848133 1180 1207 D PowerManagerService: |----com.android.server.power.PowerManagerService.goToSleepNoUpdateLocked(PowerManagerService.java:1464)07-12 04:25:24.848330 1180 1207 D PowerManagerService: |----com.android.server.power.PowerManagerService.updateWakefulnessLocked(PowerManagerService.java:2109)07-12 04:25:24.848434 1180 1207 D PowerManagerService: |----com.android.server.power.PowerManagerService.updatePowerStateLocked(PowerManagerService.java:1676)07-12 04:25:24.848531 1180 1207 D PowerManagerService: |----com.android.server.power.PowerManagerService.handleUserActivityTimeout(PowerManagerService.java:2035)07-12 04:25:24.848632 1180 1207 D PowerManagerService: |----com.android.server.power.PowerManagerService.-wrap18(PowerManagerService.java)07-12 04:25:24.848728 1180 1207 D PowerManagerService: |----com.android.server.power.PowerManagerService$PowerManagerHandler.handleMessage(PowerManagerService.java:3390)07-12 04:25:24.848835 1180 1207 D PowerManagerService: |----android.os.Handler.dispatchMessage(Handler.java:110)07-12 04:25:24.848941 1180 1207 D PowerManagerService: |----android.os.Looper.loop(Looper.java:203)07-12 04:25:24.849034 1180 1207 D PowerManagerService: |----android.os.HandlerThread.run(HandlerThread.java:61)07-12 04:25:24.849123 1180 1207 D PowerManagerService: |----com.android.server.ServiceThread.run(ServiceThread.java:46)07-12 04:25:24.849207 1180 1207 I PowerManagerService: Going to sleep due to screen timeout (uid 1000)...07-12 04:25:24.849337 1180 1207 D PowerManagerNotifier: onWakefulnessChangeStarted: wakefulness=3, reason=2, interactive=false
[小结]
在JAVA中可以使用new Throwable().getStackTrace()的方式获取某函数的被调栈过程。
StackTraceElement[] stack = new Throwable().getStackTrace();
阅读全文
0 0
- Android JAVA源码之打印调用栈
- Android Java打印函数调用栈
- Android打印调用栈
- Android调用栈打印
- android打印调用栈
- (about program)android中打印java调用栈
- Android下打印调用栈
- Android打印代码调用栈
- Android下打印调用栈
- Android下打印调用栈
- Android下打印调用栈
- Android中打印调用栈
- Android下打印调用栈
- Android下打印调用栈
- Android下打印调用栈
- Android下打印调用栈
- Android打印函数调用栈
- Android平台打印调用栈
- 关于selenium+python的googledirver和iedirver的配置
- zookeeper leader和learner的数据同步
- Android 关于adb授权原理
- FireMonkey下的WndProc实现
- TreeGrid jQuery plugin
- Android JAVA源码之打印调用栈
- 1.数据库-MongoDB安装
- thinkphp 隐藏index.php iis apache nginx
- let&const进阶
- Laravel学习之
- 7.12--SSH学习之Struts上传和下载和Ajax,Json
- PHP内核探索:PHP中的哈希表
- Spring5:@Autowired注解、@Resource注解和@Service注解
- spark--actions算子--takeSample