AndroidUtilCode
AndroidUtilCode copied to clipboard
在自定义View里使用,布局不能预览。
描述 Bug
自定义view中调用了Utils.getApp()方法,无法预览,搜索别人反馈的无法预览的bug,和我这个不一样
- AndroidUtilCode 的版本:1.30.6
- 出现 Bug 的设备型号: studio直接预览报错
- 设备的 Android 版本:项目编译sdk api 30
相关代码
init {
Utils.getApp()
}
异常堆栈
Exception Details java.lang.NullPointerException
at java.lang.reflect.Method.invoke(Method.java:559)
at com.blankj.utilcode.util.UtilsActivityLifecycleImpl.getApplicationByReflect(UtilsActivityLifecycleImpl.java:180)
at com.blankj.utilcode.util.UtilsBridge.getApplicationByReflect(UtilsBridge.java:104)
at com.blankj.utilcode.util.Utils.getApp(Utils.java:71)
截图
分析
在此处调用invoke,会在自定义view中预览时抛出Null异常。
invoke 方法会报错
报错后未try catch
反射没有取到application,是不是还没有初始化
反射没有取到application,是不是还没有初始化
首先需要理解,当前是自定义view在studio的预览,app不会运行,所以初始化无从谈起,这里就是studio执行自定义view代码流程的死板,机械之处。自定义view预览是要执行代码流程的,但是初始化类型的对象,自定义view预览都是默认按照null去执行代码流程的。这个问题,我在自定义view中使用liveeventbus的时候也出现了,无法预览,于是把liveeventbus的aar包反编译后改了反射获取application的代码让,为空不干任何事,编译也通过了,反正反射获取application基本上在真的app运行的时候是不会为空。studio太差劲了
明白了
编辑界面没有Application, 或者说这个Application不是你项目中的Application, 运行的线程也不是SDK中的ActivityThread. 反射都会失效, 同理, 在Android的UnitTest中也不能用项目中的Application, 其实在View中使用Context建议通过View#getContext函数获取View自己的Context