現在、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() は問題を解決しませんが、それは解決すべき詳細にすぎません。今のところ気にする必要はありません。
storeData() メソッドは、ScheduledFuture (タイマー) で 100 ミリ秒 (atFixedRate) ごとに呼び出されます。タイマーが IF のために storeData() を呼び出さない限り、すべてが期待どおりに機能します。しかし、 storeData() が初めて呼び出されるとすぐに...
... プログラムは、waitCRM.add(crmValue) の間にメソッド storeData() を終了します。
... タイマーがキャンセルされます (他のスレッドが動作を再開します)
...コンソールまたはLogCatに例外やその他のものが見つかりません
エラーメッセージがなければ、多くのことを調べるだけで何時間もかかりました。だからここに私の質問があります:どのように、どのような状況で Java/Android はエラーを表示せずにスレッドを停止しますか?
アイデアをありがとう!