在不冻结应用程序的情况下更新TextView



我正在从设备传感器(多个传感器(读取传感器数据,并调用一个方法将我从传感器接收的数据显示到设计的TextView中。

我调用的更新TextView:的方法

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

SensorEventListener的onSensorChanged事件调用的方法。

我想不通的是如何在更新TextView时防止冻结;由于传感器数据更新是密集的(考虑到它同时来自多个传感器(,更新TextView会导致应用程序冻结或崩溃我不需要"打印"我收到的每一个数据,比如每1-2秒打印一次就足够了,丢失的数据可以忽略

有没有任何方法/模式或内置结构可以实现这一点?(我是Java和Android编程的新手,但我熟悉多道程序、并行编程的概念,但我不知道如何在这种环境中应用它们(

这是最快的解决方案:https://github.com/ReactiveX/RxJavahttp://reactivex.io/documentation/operators/debounce.html

或者你可以:

  • 创建堆栈(例如(
  • 将传感器数据流从thread#1写入堆栈
  • 在另一个无限循环中,thread#2每隔N时间从堆栈读取最后一个数据(不要忘记同步它们(
  • 清理烟囱
  • 将最后一个数据写入TextView(不要忘记在ui线程中设置文本:textView.post( () -> textView.setText("safe call") );

相关内容

  • 没有找到相关文章

最新更新