Inicio de un runnable en el hilo de fondo

Tengo, a mi conocimiento, implementado un runnable que se crea en un nuevo hilo. Sin embargo, el subproceso no parece estar ejecutándose en segundo plano y las acciones tomadas dentro de ejecutables están bloqueando la interfaz de usuario con acciones pesadas.

Vea abajo:

custListLoadThread = new Thread(loadRunnable); custListLoadThread.run(); private Runnable loadRunnable = new Runnable() { @Override public void run() { android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND); Gen.popup("TEST"); // Creates a toast pop-up. // This is to know if this runnable is running on UI thread or not! try { customers = Db.BasicArrays.getCustomers(CustomApp.Session.businessCode, empId); runOnUiThread(new Runnable() { @Override public void run() { populate(); setCustListVisible(true); loading = false; } }); } catch (final Exception ex) { runOnUiThread(new Runnable() { @Override public void run() { Gen.popup(ex.getMessage()); } }); } } }; 

Sin embargo, este código no se ejecuta en segundo plano, todavía parece ejecutarse en el subproceso de interfaz de usuario. He colocado la línea Gen.popup("TEST"); Para asegurarse de que esto (llamar a un toast pop-up en un hilo no UI debe causar un error).

Cualquier idea de por qué este runnable no se está ejecutando en segundo plano?

 custListLoadThread = new Thread(loadRunnable); custListLoadThread.start(); 

Necesita iniciar el subproceso, no llamar al método run () en el subproceso actual.

Si desea ejecutar código en un subproceso de fondo que no hace algo con la interfaz de usuario:

  Runnable runnable = new Runnable() { @Override public void run() { //your action } }; AsyncTask.execute(runnable); 

Por supuesto, como se escribe antes de que también puede crear un nuevo hilo (que es independiente de la interfaz de usuario de hilo):

  new Thread(runnable).start(); 

En tu ejemplo quieres actualizar los elementos de la interfaz de usuario, así que mejor utilizar un AsyncTask (debe ser llamado desde el subproceso de interfaz de usuario):

  new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { // your async action return null; } @Override protected void onPostExecute(Void aVoid) { // update the UI (this is executed on UI thread) super.onPostExecute(aVoid); } }.execute(); 
  • ¿Es posible detener un hilo cuando el usuario pulsa la tecla de retroceso?
  • Conjunto de subprocesos en Java
  • Android kill thread específico en evento barra de acción
  • Los animadores sólo se pueden ejecutar en los subprocesos Looper en Sherlock Action Bar
  • Runnable se publica correctamente pero no se ejecuta
  • Si cualquier hilo de trabajo puede actualizar la interfaz de usuario en android?
  • Java.lang.Thread.setPriority vs android.os.Process.setThreadPriority
  • ¿Puede alguien ayudarme a entender el enhebrado de mi programa?
  • Acceso a vistas desde otro hilo (Android)
  • ANR keyDispatchingTimedOut
  • ¿Cuándo necesitamos usar runOnUiThread en la aplicación android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.