私は、変数が変更されたという通知を受け取ってから、TextViewを更新するBLE Androidアプリを持っています。 UIコンポーネントはUIスレッドでのみ更新でき、 "OnCharacteristicChanged"メソッドは本質的にUIスレッドではありません。今Android BLE - GattCallbackメソッドからカスタムスレッドが開始され、最終的にガベージコレクトされますか?
class updateViews implements Runnable {
TextView viewToChange;
String stringToSet;
public updateViews(TextView viewToChange, String stringToSet) {
this.viewToChange = viewToChange;
this.stringToSet = stringToSet;
}
public void run() {
viewToChange.setText(stringToSet);
}
}
:私が主な活動で、このカスタムクラスを持っている
@Override
public void onCharacteristicChanged (BluetoothGatt gatt, BluetoothGattCharacteristic characteristic){
//Get the value as a string from the characteristic, as well as the TextView I want to update
Runnable t = new updateViews(viewToUpdate, updateString);
BLE_Test.this.runOnUiThread(t);
}
:だから私はそれを行う方法は、(BLE_Testが私の主な活動の名前です)私のGattCallbackに以下の通りです私は、 "onCharacteristicChanged"を呼び出すたびに、新しいTextViewとStringパラメータで新しいスレッドを作成していることを非常に意識しています。 Javaの知識から、各 "updateViews"スレッドは、 "onCharacteristicChanged"スレッドが終了するとガベージコレクションされるべきです。しかし、 "onCharacteristicChanged"は本当にその点で通常のスレッドですか?私は、このメソッドがスレッドセーフであり、メモリリークを引き起こさないことを確認したいだけです。また、より良い方法があれば教えてください。ありがとう。