/ / Android AsyncTask wysyłanie wiadomości do modułu obsługi w martwym wątku - Java, Android, Json, wielowątkowość, Android-Asynctask

Android AsyncTask wysyła wiadomość do Handler'a na martwym wątku - java, android, json, wielowątkowość, android-asynctask

Próbuję stworzyć program, który powinien działaćcoś w rodzaju katalogu - mam tablicę JSON, którą przeglądam i analizuję obiekty JSON w ciąg zawierający łącze do obrazu oraz dwa ciągi opisów dla każdego obiektu. Teraz, kiedy pobieram obrazy z Internetu za pomocą linku, napotykam problem z tym samym obrazem za każdym razem, obraz nr 93. Sprawdziłem link i działa, tak samo jak inne. To się stało:

 W/MessageQueue: Handler (android.os.Handler) {f95f6fe} sending message to a Handler on a dead thread
java.lang.IllegalStateException: Handler (android.os.Handler) {f95f6fe} sending message to a Handler on a dead thread
at android.os.MessageQueue.enqueueMessage(MessageQueue.java:543)
at android.os.Handler.enqueueMessage(Handler.java:643)
at android.os.Handler.sendMessageAtTime(Handler.java:612)
at android.os.Handler.sendMessageDelayed(Handler.java:582)
at android.os.Handler.post(Handler.java:338)
at android.os.ResultReceiver$MyResultReceiver.send(ResultReceiver.java:57)
at com.android.internal.os.IResultReceiver$Stub.onTransact(IResultReceiver.java:58)
at android.os.Binder.execTransact(Binder.java:565)

Tak wygląda moja AsyncTask:

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;

public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}

protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
e.printStackTrace();
}
return mIcon11;
}

protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}

Oto jak nazywam AsyncTask:

 new DownloadImageTask(imgProductPicture).execute(pictureLink);
layoutTest.addView(NewImgView);

W moim kodzie upewniam się, że nie więcej niż 5 zsą one wywoływane jednocześnie i wszystkie ładują się bez problemu, dopóki nie dotrą do obiektu zindeksowanego 92. Sam obiekt jest w porządku, ale aplikacja wyłącza się zawsze w tym momencie. Czy ktoś ma pomysł, dlaczego? Próbowałem pobierać mniej obrazów na raz (jeden po drugim) i nadal nie udaje się w tym samym momencie. Doceniam każdą pomoc.

Odpowiedzi:

0 dla odpowiedzi № 1

AsyncTask wykorzystuje moduł obsługi głównego wątku do wywołania zwrotnego onPostExecute(). Jeśli główny wątek jest martwy, kiedy ma zostać wywołane, system zgłasza wyjątek. Aby tego uniknąć, musisz utrzymać główny wątek przy życiu, dopóki cała praca nie zostanie zakończona.


0 dla odpowiedzi nr 2

Rozwiązałem problem, tworząc nową funkcję obsługi / uruchamiania za każdym razem, gdy wywoływałem DownloadImageTask. Dziękujemy wszystkim, którzy próbowali pomóc.