Я пытаюсь загрузить большое количество данных с нескольких устройств Bluetooth одновременно. Но поскольку данных очень много, приложение зависает во время загрузки. Мой код работает примерно так (псевдокод):
function BluetoothDownloadPage() {
const [data, setData] = useState({
device1: [],
device2: [],
device3: [],
device4: [],
});
async function fetchData(device) {
device.addListener(data => setData(newData=> [...data[device.getName()], newData]);
device.startDownload();
}
async function downloadFromAllDevices() {
fetchData(device1);
fetchData(device2);
fetchData(device3);
fetchData(device4);
}
return (
<View>
<Text>{JSON.stringify(data)}</Text>
<Button onPress={downloadFromAllDevices}></Button>
</View>
);
}
Когда новые данные принимаются с устройства, они сначала сохраняются в моем пользовательском классе Device
. Каждую секунду класс устройства отправляет уведомление компонентам React для обновления состояния (индикатор выполнения).
Я не знаю, как я могу загрузить данные, не вешая поток JS. Каждый датчик отправляет 240 байтовых пакетов за раз со скоростью примерно 8 Кбит / с. Это равносильно необходимости записи данных в массив более 30 раз в секунду для каждого устройства, и я думаю, что это слишком много для низкокачественных устройств.