ich diese Störung erhalte -Thema/Handler Fehler - Der angegebene Message Queue Synchronisation Sperr Token wurde nicht veröffentlicht
java.lang.IllegalStateException: Die angegebene Nachrichtenwarteschlange Synchronisation Sperre Token geschrieben wurde nicht oder hat wurde bereits entfernt.
Als relativer Neuling in Java/Android, gibt es keinen Zweifel etwas, was ich verpasst haben, aber was ich tue, ist dies -
ich ein Projekt haben, die Exif-Daten verwendet Fotos angezeigt werden gemäß der Datum, dass sie genommen wurden, und die Absicht ist, ein ähnliches Modell auf jeder Stufe zu verwenden ...
Worker-Thread -> UI-Thread -> Benutzerdefinierte Display-Adapter. Durch Klicken auf eine der "Zellen" in GridView wird die nächste Aktivität ausgelöst. Die erste Aktivität sucht nach allen Fotodateien, erstellt eine Liste von "Jahren" und filtert sie anschließend nach Monaten, Tagen usw.
Die zweite Aktivität startet jedoch direkt in den obigen Fehler und die Nachrichten werden über die grundlegende Thread/Handler-Konfiguration behandelt. Hier
ist die Klasse, die Nachrichten an den Thread vorbei -
public class MonthSort {
Handler handler;
int imageWidth;
List<PhotoData> photoList;
public MonthSort(Handler handler2, int width, List<PhotoData> pList) {
photoList = new ArrayList<PhotoData>();
photoList = pList;
imageWidth = width;
handler = handler2;
}
public void sortFiles()
{
int month, photoCount;
File fileName = new File("");
Message msg = handler.obtainMessage();
//Message msg = Message.obtain();
//Bundle bundle = new Bundle();
try {
for (int i = 0; i < 12; i++) {
month = i + 1;
photoCount = 0;
for (PhotoData pd : photoList) {
if(month == pd.month)
{
if(photoCount == 0)
fileName = pd.fileName;
photoCount++;
}
}
if(photoCount != 0)
{
Bundle bundle = new Bundle();
bundle.putString("filename", fileName.toString());
bundle.putInt("month", month);
bundle.putInt("count", photoCount);
byte[] thumbNail = getThumbnail(fileName, imageWidth);
bundle.putByteArray("thumbnail", thumbNail);
msg.setData(bundle);
handler.sendMessage(msg);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("Debug", "handler error occurs in monthSort class");
}
/*Bundle bundle = new Bundle();
bundle.putBoolean("end", true);
msg.setData(bundle);
handler.sendMessage(msg);*/
}
... und das ist der Code, den es in dem UI-Thread empfängt.
Bitte beachten Sie, dass ich nicht den gesamten Code enthalten habe, nur die Teile, die ich für relevant halte.
Die vorherige Aktivität verwaltet erfolgreich Nachrichten auf die gleiche Weise, warum nicht die zweite Aktivität?
Ich verstehe, dass der Haupt-UI-Thread bereits einen Looper eingerichtet hat und Sie daher keinen erstellen müssen. Gilt das noch für alle nachfolgenden Aktivitäten, die gestartet werden?