gpt4 book ai didi

java - Android BLE - 自定义线程是否从 GattCallback 方法开始和完成最终被垃圾收集?

转载 作者:行者123 更新时间:2023-11-30 00:21:53 25 4
gpt4 key购买 nike

我有一个 BLE Android 应用程序,我想在其中接收变量已更改的通知,然后更新 TextView。 UI 组件只能在 UI 线程上更新,而“OnCharacteristicChanged”方法本质上不是 UI 线程。所以我在 GattCallback 中的做法如下(其中 BLE_Test 是我的主要 Activity 的名称):

@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);

}

我在主要 Activity 中有这个自定义类的地方:

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);
}
}

现在,我非常清楚每次调用“onCharacteristicChanged”时,我都会创建一个带有新 TextView 和 String 参数的新线程。根据我对 Java 的了解,一旦“onCharacteristicChanged”线程结束,每个“updateViews”线程都应该被垃圾收集。但是在这方面“onCharacteristicChanged”真的是一个普通线程吗?我只是想确保此方法是线程安全的并且不会导致内存泄漏。另外,如果有更好的方法,请告诉我。谢谢。

最佳答案

一切顺利。

runOnUiThread 不会启动新线程,而是安排在主线程上执行的工作。当不再有来自任何线程的任何引用时,您的对象将被正确地垃圾收集。

关于java - Android BLE - 自定义线程是否从 GattCallback 方法开始和完成最终被垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46142571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com