2016-04-16 14 views
7

Tôi đã thấy sự cố bên dưới (thông qua Crashlytics), nhưng không thể xác định nguyên nhân hoặc tái tạo sự cố. Nó xảy ra trên nhiều loại thiết bị và phiên bản Android. Ứng dụng sử dụng appcompat-v7: 23.2.1. Có ai nhìn thấy nó không?Liên tục NullPointerException từ AppCompatDelegateImplV7.createSubDecor()

Như bạn thấy, sự cố xảy ra trong phương pháp onCreate() của HomeActivity, mở rộng android.support.v7.app.AppCompatActivity. Trong vòng AppCompatDelegateImplV7.createSubDecor, cuộc gọi đến mWindow.findViewById(android.R.id.content) đôi khi trả về giá trị rỗng. Điều này dẫn đến kết quả trong một NullPointerException trên dòng 475. Với tôi, điều này smacks của một điều kiện chủng tộc trong mã appcompat.

Sự cố tương tự xảy ra trong một Hoạt động khác và cả hai đều sử dụng CoordinatorLayout làm phần tử bố cục gốc của chúng. Yếu tố này được giới thiệu vào khoảng thời gian vụ tai nạn bắt đầu xuất hiện, vì vậy tôi không thể không tự hỏi liệu có kết nối hay không.

Dưới đây là phần có liên quan của chồng:

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) 
+0

Sự cố cũng xảy ra với các phiên bản sau của appcompat-v7: 23.1.1; 23.2.0; 23.3.0 – markproxy

+0

CoordinatorLayout dường như không liên quan đến vụ tai nạn; loại bỏ điều đó đã không làm cho vụ tai nạn biến mất. Thật kỳ quặc, việc hạ cấp Dịch vụ Play từ 8,4 xuống 7,8 khiến cho sự cố không còn nữa. Vì tôi không thể tưởng tượng làm thế nào có thể có bất kỳ kết nối trực tiếp, tôi phải đoán rằng Play Services 8.4 gây ra một sự khác biệt thời gian làm tăng khả năng kích hoạt một điều kiện chủng tộc. – markproxy

+0

Đã gửi báo cáo vấn đề cho Google: https://code.google.com/p/android/issues/detail?id=207638&thanks=207638&ts=1461213833 – markproxy

Trả lời

1

Chris Banes đề xuất một cách giải quyết: trong phương pháp onCreate() của Hoạt động, thêm một cuộc gọi đến getWindow().getDecorView() trước khi gọi super.onCreate(). Thử nghiệm ban đầu về cách giải quyết này rất hứa hẹn.

Mã này kết thúc lên tim như thế này:

@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 

    ... 
} 

Cập nhật: với cách giải quyết này được triển khai, chúng tôi đang nhìn thấy zero lần xuất hiện của vụ tai nạn này.

Cập nhật: Lỗi này là reported fixed trong 23.4.0.

+1

Tôi đã có lỗi tương tự và nó không cố định trong 23.4.0.1. Nhưng cách giải quyết này hoạt động. –