我遇到了一个非常奇怪的问题,根本没有任何意义。我在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的东西。好吧,请求帮助。