what vistas viewgroups studio layouts grupos ejemplo crear java android viewgroup

java - viewgroups - vistas y layouts en android



Bloqueo de Android ViewGroup: intento de leer desde el campo ''int android.view.View.mViewFlags'' en una referencia de objeto nulo (7)

Hemos encontrado varios casos para este tipo de fallas informadas por el monitoreo del registro de fondo. Parece que los bloqueos no están vinculados a una falla particular de UX. Y de los informes, no hay signos de cómo están involucradas nuestras propias clases (no hay signos de ninguno de los nombres de nuestras clases). Aquí hay un ejemplo de accidentes típicos:

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)

¿Alguien sabe si hay un error relacionado registrado contra el código de Android?


Solución posible

Tuve el mismo problema. Configuré una animation y en onAnimationEnd estaba eliminando el objeto que había sido animado, que es cuando comenzaron los problemas. Lo que hice fue configurar un Runnable asíncrono para esperar 100 milisegundos después de que la animación se detuviera antes de eliminar el objeto animado:

el objeto previamente animado es 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); }

Aclamaciones


Anule el método dispatchDraw y coloque un bloque try / catch, como este:

public void dispatchDraw(Canvas c) { try { super.dispatchDraw(c); return; } catch(Exception exception) { return; } }


Aunque la excepción es común, la fuente causante es poco común y ocurre cuando tiene tantas vistas dinámicas . A veces, desplazarse en la página de Instagram causa esta excepción. Sin embargo, si profundiza en eso, el problema del hardware puede llegar a ser un problema . Así que solo maneja ( atrapa ) el problema.


Comenzamos a recibir este error inesperadamente también. Fue rastreado hasta fragmentos de animaciones siendo el problema. Más específicamente, utilizando animaciones personalizadas con replace() en una transacción fragmentada cuando la aplicación se compila contra el Local Maven repository for Support Libraries rev> 26

Solución posible

Rebajar el Local Maven repository for Support Libraries hasta la versión 26. Ver here


El problema está en el ViewGroup dispatchDraw() ViewGroup . Este método intenta dibujar todos los elementos ViewGroup de ViewGroup . Cuando un niño es null , obtiene una excepción, que probablemente proviene de esta línea : if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE) { (observe los mViewFlags ).

Entonces, el problema es que una de sus vistas, en algún lugar, no se inicializa correctamente. Me temo que es lo mejor que puedo hacer.


Estaba enfrentando el mismo problema. Resolví con Handler.

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


Causa posible: estaba teniendo exactamente el mismo problema. Resultó que comenzó a suceder cuando agregué código para modificar el árbol de vista dentro de la llamada onDraw (). Para ser específicos, eliminé una vista con niños en mi onDraw () derivado cuando se cumplieron ciertas condiciones. Ahora creo que esto es algo malo, probablemente porque la plataforma está intentando dibujar vistas que ahora he eliminado del árbol de vistas. Resolví el problema publicando la eliminación con Runnable para que ocurriera después de que la llamada a onDraw () haya finalizado.