错误栈信息如下:
第一步:首先看看出问题的源码
没觉得有何异常,而且研发测试灰度发版过程中都没有崩溃,最终崩溃位置android.widget.RelativeLayout.onMeasure是android源码,所以初步怀疑是适配问题,再找找其他信息
第二步:查找更多信息
过程中发现崩溃只集中在4.2.2和4.3版本,基本可以确认是版本适配问题,再仔细看看崩溃的日志,如下:
1 android.widget.RelativeLayout.onMeasure(RelativeLayout.java:631)
2 android.view.View.measure(View.java:15689)
实际崩溃发生在android源码里,高度怀疑是老版本的bug
第三步:查老版本android源码
这里首先安利一个看android源码的网站,可以看到android 9及以前的所有源码:
打开网站找4.3的源码(看4.2.2的也行),可以看到RelativeLayout.java548行,mLayoutParams没有判空就直接使用了,崩溃就出在这里
第四部,解决
找到问题,解决问题的办法就好找了:
ViewGroup.LayoutParams lp = contentView.getLayoutParams();
if (lp == null) {
lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
contentView.setLayoutParams(lp);
}
contentView.getLayoutParams()如果为null,就new一个LayoutParams并set,这样就解决了问题哈!
谢谢阅览,欢迎建议