我目前在我的 Android 虚拟机(模拟器,Android 2.1)上开发时遇到了一个问题。与其说是解决问题,不如说是理解。我所拥有的是这种方法:
private void storeData(int crmValue, int crmTouch, int heartrate) {
// Store in data or ring buffer
waitCRM.add(crmValue);
waitTouch.add(crmTouch);
waitHeart.add(heartrate);
}
wait*** 是用户自定义类 RingBuffer 的实例变量。这个类的 add 方法是这样的:
public void add(E o) {
buffer.set(index, o);
index++;
if (index == capacity) {
index = 0;
}
if (length < capacity) {
length++;
}
}
在这种情况下,E 是一个 Integer,缓冲区是一个 ArrayList,容量为 60,索引为 0,因为这是第一个 add() 调用。
当然,此时 ArrayList/buffer 为空,并且 buffer.set() 可能不正确,因为这将返回当前值。实际上 buffer.add() 并没有解决问题,但这只是一个需要解决的细节。暂时不应该打扰你。
每 100 毫秒 (atFixedRate) 在 ScheduledFuture(计时器)中调用 storeData() 方法。只要计时器由于 IF 而不会调用 storeData() ,一切都会按预期工作。但是一旦第一次调用 storeData() ......
...程序在 waitCRM.add(crmValue) 期间离开方法 storeData();
...定时器被取消(其他线程恢复工作)
...并且在控制台或 LogCat 中没有发现异常或其他任何内容
鉴于没有错误消息,我花了几个小时才发现这么多。所以这是我的问题:Java/Android 如何以及在什么情况下停止线程而不显示任何错误?
感谢您的任何想法!