android.view.ViewRootImpl $ CalledFromWrongThreadException

android.view.ViewRootImpl$CalledFromWrongThreadException:
Only the original thread that created a view hierarchy can touch its views.

(Solo el hilo principal que creó el objeto de IU puede modificar la IU)

Solución uno:

Android no es seguro para subprocesos. Android tiene un mecanismo para evitar que los subprocesos secundarios actualicen la interfaz de usuario. En la programación de Android, algunas operaciones que consumen mucho tiempo deben realizarse en un subproceso separado fuera del subproceso principal, y luego se actualiza la pantalla de la interfaz de usuario. Sin embargo, el problema de actualizar directamente la pantalla de la interfaz de usuario en un hilo que no sea el hilo principal es que el sistema informará esta excepción y el trabajo de actualizar la pantalla de la interfaz debe realizarse en el hilo principal del programa (es decir, el hilo de la interfaz de usuario). Por lo tanto, debemos entregar la actualización de la interfaz de usuario al hilo principal para completar, Android nos proporciona un conjunto de mecanismos de procesamiento de mensajes.

Pasos de implementación:
  cree una instancia mHandler de la clase Handler en onCreate (Bundle Savedinstancestate) {} de Activity, y llame al método de actualización de la pantalla de la interfaz en el método de devolución de llamada del método handleMessage (msg) de esta instancia mHandler. P.ej:

public class ExampleActivity extends Activity {
    
      
    Handler h = null;  
    @override  
    public void onCreate(Bundle savedinstancestate){  
        h = new Handler(){  
            @override  
            public void handleMessage(Message msg){  
                // call update gui method.  
            }  
        };  
    }  
}  

 En otras funciones, utilice las funciones enviar familia o publicar familia para enviar o enviar mensajes a este mHandler.
 Si este error aún se informa después de usar Handler, intente cambiar handleMessage (msg) a sendMessage (msg).
 

Solución dos:

Use activity.runOnUiThread (new Runnable () {}) para crear el código para actualizar la IU en ejecutable, y luego pase este objeto Runnable a activity.runOnUiThread (ejecutable) cuando la IU necesita ser actualizada. De esta manera, el objeto ejecutable se puede llamar en el programa ui.

getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {

                    }
                });

Supongo que te gusta

Origin blog.csdn.net/CHITTY1993/article/details/52325607
Recomendado
Clasificación