Log打印方法调用栈信息
Log.e(TAG, "isChecked setter key:$key value:$value", Exception("stack"))
Exception("stack") 创建一个异常对象,Log.e() 的第三个参数 Throwable 会把堆栈打印到 logcat。输出效果类似:
E T1p_CollaborationController: isChecked setter key:persist.lab.disclaimer.assistant value:false java.lang.Exception: stack at com.autolink.hmi.carsettings.view.TitleSwitchView.setIsChecked(TitleSwitchView.kt:68)Log.e(TAG, "isChecked setter key:$key value:$value", Exception("stack"))
Exception("stack") 创建一个异常对象,Log.e() 的第三个参数 Throwable 会把堆栈打印到 logcat。输出效果类似:
E T1p_CollaborationController: isChecked setter key:persist.lab.disclaimer.assistant value:false java.lang.Exception: stack at com.autolink.hmi.carsettings.view.TitleSwitchView.setIsChecked(TitleSwitchView.kt:68) at com.autolink.hmi.carsettings.view.TitleSwitchView.access$setIsChecked(...) at ... ← 调用者在这里之前分析的日志里没搜到 "isChecked setter",说明在那个场景下 isChecked 的 setter 没有被外部直接调用,onCheckedChanged(false) 是来自 SwitchCompat
内部的 setChecked()(CompoundButton.onRestoreInstanceState → setChecked),不经过 TitleSwitchView.isChecked 的 setter。
Log.e(TAG, "isChecked setter key:$key value:$value", Exception("stack"))
Exception("stack") 创建一个异常对象,Log.e() 的第三个参数 Throwable 会把堆栈打印到 logcat。输出效果类似:
E T1p_CollaborationController: isChecked setter key:persist.lab.disclaimer.assistant value:false java.lang.Exception: stack at com.autolink.hmi.carsettings.view.TitleSwitchView.setIsChecked(TitleSwitchView.kt:68) at com.autolink.hmi.carsettings.view.TitleSwitchView.access$setIsChecked(...) at ... ← 调用者在这里这个方法调用很少用到,在此记录一下
