使用LinkedList的异步任务中的Android NoSuchElemenException

时间:2014-03-13 19:54:20

标签: android asynchronous android-asynctask semaphore

我遇到了一个非常奇怪的问题,根本没有任何意义。我在Android中使用Async Task在我的UI上打印一些数据。 doInBackground-Part看起来像这样:

        @Override
        protected Void doInBackground(Void... arg0) {
            Double lastVal = 0.0;
            while (!stopTask){
                try{
                    popDataSemaphore.acquire();
                    if (data.size() > 0){
                        Double data = me.data.pop();

                        if (!data.equals(lastVal))  {
                            publishProgress(data); 
                            lastVal = data;
                        }

                    }
                    popDataSemaphore.release();
                }
                catch (InterruptedException e){
                    e.printStackTrace();
                }

            }

            return null;
        }

在此任务中,您可以看到" me.data.pop()"。数据是修改后的LinkedList。唯一的修改是,在给定的大小,它不会添加任何更多的值。它只是忽略了它们。 LinkedList由另一个异步任务填充。

如您所见,即时通讯使用信号量。这是在android 3.0之前的cuz,异步任务是在多个线程上执行的。 奇怪的是,不时有一个" NoSuchElementException"在Line" Double data = me.data.pop()"中抛出。怎么可能?

在我修改过的LinkedList中,我只覆盖了add-Method:

@Override
public boolean add(E o) {
    if(limit == size())
        return false;
    super.add(o);
    return true;
}

提前致谢。

修改

好吧,我没有真正解决问题 - 我仍然不知道为什么会这样 - 但我找到了另一种方式。我刚刚使用了一个ArrayList,并对LinkedList进行了相同的修改。使用ArrayList,不会发生异常。必须是关于LinkedList的东西。好吧,请求帮助。

0 个答案:

没有答案