Обновление TextView без зависания приложения - PullRequest
1 голос
/ 28 апреля 2020

Я читаю Данные датчика с датчиков устройства ( Несколько датчиков ) и вызываю метод для отображения данных, полученных от датчиков, в разработанном TextView.

Метод, который я вызываю для обновления TextView:

private void UpdateDataStream(String _Entry,Boolean isAppend)
{
    if(isAppend)
        ViewHolder.append("\n("+sensorName+")"+_Entry);
    else
        ViewHolder.setText("("+sensorName+")"+_Entry);
}

Метод, вызванный из SensorEventListener's , onSensorChanged Событие.

Что я не мог понять, так это как предотвратить зависание при обновлении TextView; так как обновление данных датчика интенсивно (учитывая, что оно происходит от нескольких датчиков одновременно), обновление TextView приводит к зависанию приложения или к sh. Мне не нужно «печатать» все полученные данные, например, мне достаточно печатать каждые 1-2 секунды, потерянные данные можно игнорировать.

Есть ли какие-либо подход / патерн или встроенная структура для достижения этого? (Я новичок в программировании на Java и Android, но я знаком с концепциями мультипрограммирования, параллельного программирования, но я не мог понять, как применять их в этой среде)

1 Ответ

2 голосов
/ 28 апреля 2020

Это самое быстрое решение: https://github.com/ReactiveX/RxJava http://reactivex.io/documentation/operators/debounce.html

Или вы можете:

  • создать стек (например, )
  • запись потока данных датчиков в стек из thread#1
  • в другое бесконечное l oop thread#2 чтение последних данных из стека каждый N раз (не не забудьте синхронизировать их)
  • очистить стек
  • записать последние данные в TextView (не забудьте установить текст в потоке пользовательского интерфейса: textView.post( () -> textView.setText("safe call") );
...