微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 来自AppCompatDelegateImplV7.createSubDecor()的Intermittent NullPointerException

我一直看到下面的崩溃(通过Crashlytics),但无法确定原因或重现崩溃.它出现在各种设备和 Android版本上.该应用程序使用appcompat-v7:23.2.1.还有其他人看到了吗?

如您所见,崩溃发生在HomeActivity的onCreate()方法中,该方法扩展了android.support.v7.app.AppCompatActivity.在AppCompatDelegateImplV7.createSubDecor中,对mWindow.findViewById(android.R.id.content)的调用有时会返回null.这反过来会导致第475行出现NullPointerException.对我来说,这可能是appcompat代码中的竞争条件.

一个崩溃发生在另一个Activity中,并且都使用CoordinatorLayout作为其根布局元素.这个元素是在崩溃开始出现的时候引入的,所以我不禁想知道是否存在连接.

这是堆栈的相关部分:

Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.ViewGroup.getChildCount()' on a null object reference
   at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:475)
   at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:309)
   at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:273)
   at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
   at com.bleacherreport.android.teamstream.activities.HomeActivity.onCreate(HomeActivity.java:181)

解决方法

Chris Banes提出了一个解决方法:在Activity的onCreate()方法中,在调用super.onCreate()之前添加对getwindow().getDecorView()的调用.对这种变通方法的初步测试是非常有希望的.

代码最终看起来像这样:

@Override
public void onCreate(Bundle savedInstanceState) {
    // Workaround for issue reported to Google: https://code.google.com/p/android/issues/detail?id=207638
    // Making this call here causes the content view to be populated,avoiding the occasional crashes due
    // to null content view when calling setContentView() below.
    getwindow().getDecorView();

    super.onCreate(savedInstanceState);
    setContentView(R.layout.home_activity); // <-- Your Activity layout here

    ...
}

更新:部署此变通方法后,我们现在看到此次崩溃的次数为零.

更新:此错误在23.4.0中为reported fixed.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐