Ошибка потока / обработчика - указанный токен барьера синхронизации очереди сообщений не был опубликован

Я получаю эту ошибку -

java.lang.IllegalStateException: указанный токен барьера синхронизации очереди сообщений не был опубликован или уже был удален.

Как относительный новичок в Java / Android, я, несомненно, что-то упустил, но я делаю вот что:

У меня есть проект, который использует данные Exif для отображения фотографий в соответствии с датой их съемки, и намерение состоит в том, чтобы использовать аналогичную модель на каждом этапе ...

Рабочая нить -> UI Thread -> Пользовательский адаптер дисплея. Затем нажмите на одну изКлетки» в GridView запускает следующую активность. Первое задание ищет все файлы фотографий, создавая списокГоды»и затем каждое последующее действие фильтрует его по месяцам, дням и т. д.

Запуск второго действия, однако, запускает сразу в вышеупомянутую ошибку, и сообщения обрабатываются через базовую настройку Thread / Handler.

Вот класс, который передает сообщения в поток -

public class MonthSort {
Handler handler;
int imageWidth;
List photoList;
public MonthSort(Handler handler2, int width, List pList) {
    photoList = new ArrayList();
    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);*/
}

... и это код, который получает его в потоке пользовательского интерфейса.

public class MonthActivity extends Activity {
List photoList;
static List photos;
int imageWidth;
GridView photoGrid;
static ImageAdapter2 iAdapter;
int year;
Thread monthSortThread;

Handler handler2 = new Handler() {
    @Override
    public void handleMessage(Message msg) 
    {
        Bundle bundle = msg.getData();  // Get the message sent to the Handler.
        boolean ended = bundle.getBoolean("end");
        if(ended)
        {
            //Toast.makeText(getBaseContext(), "FINISHED !!!", Toast.LENGTH_LONG).show();
        } else
        {
            try {
                MonthData md = new MonthData();
                md.monthValue = bundle.getInt("month");
                md.monthString = getMonthString(md.monthValue);
                md.count = bundle.getInt("count");
                byte[] tn = bundle.getByteArray("thumbnail");
                md.thumbnail =  BitmapFactory.decodeByteArray(tn, 0, tn.length);
                photos.add(md);
                iAdapter.notifyDataSetChanged();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                Log.d("Debug", "handler error occurs in UI Handler");
            }
        }
    }
};

Обратите внимание, что у меня нетЯ включил весь код, только те части, которые я считаю актуальными.

Предыдущее действие удалось успешно обработать сообщения таким же образом, почему не второе действие?

Я понимаю, что основной поток пользовательского интерфейса уже имеет настройку петлителя, и поэтому вы нет надо создать. Это все еще верно для любых последующих действий, которые были запущены?

Ответы на вопрос(2)

Ваш ответ на вопрос