Arresto di Android ViewGroup: tentativo di leggere dal field 'int android.view.View.mViewFlags' in un riferimento di null object

Abbiamo trovato diversi casi per questo tipo di crash segnalati dal monitoraggio della logging di backend. Sembra che gli incidenti non siano legati a un guasto particolare UX. E dalle relazioni, non c'è alcun segno di come coinvolgere le nostre classi (nessun segno di nessuna delle nostre classi). Ecco un esempio di arresti tipici:

java.lang.NullPointerException: Attempt to read from field 'int android.view.View.mViewFlags' on a null object reference at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3357) at android.view.View.updateDisplayListIfDirty(View.java:14288) at android.view.View.getDisplayList(View.java:14315) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3549) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3528) at android.view.View.updateDisplayListIfDirty(View.java:14253) at android.view.View.getDisplayList(View.java:14315) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3549) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3528) at android.view.View.updateDisplayListIfDirty(View.java:14253) at android.view.View.getDisplayList(View.java:14315) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3549) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3528) at android.view.View.updateDisplayListIfDirty(View.java:14253) at android.view.View.getDisplayList(View.java:14315) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3549) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3528) at android.view.View.updateDisplayListIfDirty(View.java:14253) at android.view.View.getDisplayList(View.java:14315) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3549) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3528) at android.view.View.updateDisplayListIfDirty(View.java:14253) at android.view.View.getDisplayList(View.java:14315) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3549) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3528) at android.view.View.updateDisplayListIfDirty(View.java:14253) at android.view.View.getDisplayList(View.java:14315) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3549) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3528) at android.view.View.updateDisplayListIfDirty(View.java:14253) at android.view.View.getDisplayList(View.java:14315) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3549) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3528) at android.view.View.updateDisplayListIfDirty(View.java:14253) at android.view.View.getDisplayList(View.java:14315) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3549) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3528) at android.view.View.updateDisplayListIfDirty(View.java:14253) at android.view.View.getDisplayList(View.java:14315) at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:273) at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:279) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:318) at android.view.ViewRootImpl.draw(ViewRootImpl.java:2561) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2377) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2007) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1086) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6453) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:846) at android.view.Choreographer.doCallbacks(Choreographer.java:647) at android.view.Choreographer.doFrame(Choreographer.java:601) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:829) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:927) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:713) 

Qualcuno sa se c'è un problema correlato registrato contro il codice Android?

  • Formattazione data e ora a seconda della locale
  • "Apps Samsung" support uno schema URI per redirect a applicazioni specifiche?
  • Impostazione della notifica del suono dal file della scheda SD
  • Google gioco distribuisce l'applicazione solo per utenti specifici (test)
  • per implementare un gestore di SQLite per l'accesso di lettura / scrittura a filetti?
  • Errore dopo l'aggiunta della libreria dei servizi di gioco: ': app: transformClassesWithJarMergingForDebug'
  • Android Studio 2.0: perché l'esecuzione immediata non funziona quando modifica le risorse di layout di xml?
  • se (session.isOpen ()), il login facebook su android restituisce sempre false
  • Come regolare la cernitura di text in Android TextView?
  • Rileva l'attività degli utenti in android
  • Errore Android No, minSdk (API 19)> deviceSdk (API 1)
  • converti la vista in bitmap
  • 5 Solutions collect form web for “Arresto di Android ViewGroup: tentativo di leggere dal field 'int android.view.View.mViewFlags' in un riferimento di null object”

    Possibile soluzione

    Ho avuto questo stesso problema. Ho installato animation e in onAnimationEnd stavo rimuovendo l'object che era stato animato quando è iniziato il problema. Quello che ho fatto è stato impostare un Runnable asincrono per aspettare 100 millisecondi dopo che l'animation si era fermata prima di rimuovere l'object animato:

    l'object animato in precedenza è this._loader

     private void removeLoader() { final ContentContainer self = this; // "CustomContainer" needs to match the type of `this` Handler h = new Handler(); h.postAtTime(new Runnable() { @Override public void run() { MainActivity.instance.runOnUiThread(new Runnable() { @Override public void run() { try { if(self._loader == null) { // there is no loader. quit now while you still have the chance!! return; } while(self._loader.getParent() != null) { removeView(self._loader); } } catch(Exception e) { Crashlytics.logException(e); e.printStackTrace(); } self._loader = null; } }); } }, 100); } 

    Saluti

    Il problema è nel metodo dispatchDraw() ViewGroup . Questo metodo tenta di disegnare tutti i bambini di ViewGroup . Quando un bambino è null , ottieni un'exception, che probabilmente proviene da questa row : if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE) { (nota il mViewFlags ).

    Quindi il problema è che una delle tue opinioni, da qualche parte, non sia correttamente inizializzata. Temo che sia il migliore che posso fare.

    Abbiamo iniziato ad get questo errore anche inaspettatamente. È stato tracciato in giù per le animazioni di frammento che sono il problema. Più in particolare utilizzando animazioni personalizzate con replace() in una transazione di frammento quando l'applicazione è stata creata contro il Local Maven repository for Support Libraries rev> 26.

    Possibile soluzione

    Ripagare il Local Maven repository for Support Libraries a rev 26. Vedi qui

    Mi trovavo affrontando lo stesso problema. Ho risolto con Handler.

     new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { // remove fragment from here } }); 

    Possibile causa: stavo esattamente la stessa questione. È risultato che è iniziato ad accadere quando ho aggiunto codice per modificare l'tree di visualizzazione all'interno della chiamata onDraw (). Per essere specifico, ho tolto una vista con i bambini nel mio derivato suDraw () quando sono state soddisfatte determinate condizioni. Ora credo che questa sia una cosa negativa da fare, probabilmente perché la piattaforma sta cercando di trarre le viste che ho ora rimosso dall'tree di visualizzazione. Ho risolto il problema inviando la cancellazione con Runnable che avvenga dopo che la chiamata su onDraw () è terminata.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.