Objeto no bloqueado por subproceso antes de notificar () en onPostExecute

Intento notificar los adaptadores de los listviews de la clase principal en onPostExecute pero recibo el error: java.lang.IllegalMonitorStateException: objeto no bloqueado por el hilo de rosca antes de notify ()

@Override protected void onPostExecute(String result) { popularfragment.adapter.notifyDataSetChanged(); recentfragment.adapter.notifyDataSetChanged(); } 

2 Solutions collect form web for “Objeto no bloqueado por subproceso antes de notificar () en onPostExecute”

El método .notify() tiene que ser llamado desde dentro de un contexto synchronized , es decir desde dentro de un bloque synchronized .

La .notify() java.lang.IllegalMonitorStateException se .notify() cuando llama a .notify() en un objeto que no se utiliza como bloqueo para el bloque sincronizado en el que llama notificar. Por ejemplo, los siguientes trabajos;

 synchronized(obj){ obj.notify(); } 

Pero esto arrojará la excepción;

 synchronized(obj){ // notify() is being called here when the thread and // synchronized block does not own the lock on the object. anotherObj.notify(); } 

Referencia;

  • IllegalMonitorStateException API
  • Cómo usar wait & notify

Tuve el mismo error, pero (para mí) la respuesta sugerida por Rudi Kershaw no era el problema … Llamé la notify() de una notificación de la manera incorrecta (vea la última línea de ambos fragmentos):

No funciona:

 public void update() { mBuilder.setSmallIcon(R.drawable.ic_launcher) .setPriority(AesPrefs.getInt(R.string.PRIORITY_NOTIFICATION_BATTERY, NotificationCompat.PRIORITY_MAX)) .setOngoing(true); mBuilder.setWhen(AesPrefs.getLong(Loader.gStr(R.string.LAST_FIRED_BATTERY_NOTIFICATION) + Const.START_CLIPBOARD_NOTIFICATION_DELAYED, -1)); mManager.notify(); // <- lil' mistake } 

Trabajando:

 public void update() { mBuilder.setSmallIcon(R.drawable.ic_launcher) .setPriority(AesPrefs.getInt(R.string.PRIORITY_NOTIFICATION_BATTERY, NotificationCompat.PRIORITY_MAX)) .setOngoing(true); mBuilder.setWhen(AesPrefs.getLong(Loader.gStr(R.string.LAST_FIRED_BATTERY_NOTIFICATION) + Const.START_CLIPBOARD_NOTIFICATION_DELAYED, -1)); mManager.notify(Const.NOTIFICATION_CLIPBOARD, mBuilder.build()); // <- ok ;-) } 
  • ¿Qué biblioteca de tareas prioritarias de Android (Asynk Task, Multithreading) recomendaría para Android?
  • La aplicación se bloquea y suspende todos los subprocesos al utilizar AsyncTask
  • Notificando un solo hilo: notify, notifyAll o concurrent.locks.Condition?
  • La mejor manera de enviar solicitudes HTTP GET ansynchronously en Android?
  • runOnUiThread no se está ejecutando en AsyncTask
  • ¿Los hilos se eliminan automáticamente después de que el método run () sale en Java?
  • No se puede finalizar una actividad en pausa hasta que se recupera el foco
  • ASyncTask en Executor y PriorityBlockingQueue
  • Cómo obtener una variable local de un subproceso ejecutables
  • Corrección multihilo: Utilización de bloqueo sincronizado
  • Mi clase AsyncTask tiene otros subprocesos en él. ¿Cómo puedo esperar a que termine con todos sus subprocesos antes de ejecutar un método siguiente?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.