android - 观察者何时需要实时数据?

标签 android kotlin android-livedata

我有一个 View 模型,它将字节数组处理为稍微复杂的 float 组。数据的一部分是时间戳,我将其设置为 LiveData 类型,观察者监听时间戳的变化。当发生更改时,它会获取新的时间戳并获取 float 组。

我的问题是,当在 LiveData 对象中设置“值”时,观察者是立即调用还是等待周围函数完成?换句话说,我应该确保在设置“值”之前更新观察者正在访问的任何其他数据吗?

此外,这是否滥用了 LiveData 机制(将其用作数据发生较大变化的标志)?

  val mTime = MutableLiveData<Double>()
  var mStateDataSet = ArrayList<ArrayList<Float>>()

  fun updateData(rawData: ByteArray) {

    val buffer = ByteBuffer.wrap(rawData).order(ByteOrder.LITTLE_ENDIAN)

    val min = (buffer.getInt(4)).toDouble()
    val usec = (buffer.getInt(8)).toDouble()

    val time: Double = min * 60.0 + usec * (1.0 / 1e6)

    // Update the live data....
    mTime.value = time

    // This data is used by the observer of "mTime"
    mStateDataSet[KEY_VOLTAGES] = getSubDataFloat(buffer, NUM_VOLTAGE);
    mStateDataSet[KEY_PRESSURES] = getSubDataFloat(buffer, NUM_PRESSURE);
    mStateDataSet[KEY_LEFT_ANGLES] = getSubDataFloat(buffer, NUM_LEFT_ANGLES);
    mStateDataSet[KEY_RIGHT_ANGLES] = getSubDataFloat(buffer, NUM_RIGHT_ANGLES);
    mStateDataSet[KEY_LEFT_ACCEL] = getSubDataFloat(buffer, NUM_LEFT_ACCEL);
    mStateDataSet[KEY_RIGHT_ACCEL] = getSubDataFloat(buffer, NUM_RIGHT_ACCEL);
    mStateDataSet[KEY_DEBUG] = getSubDataFloat(buffer, NUM_DEBUG);

  }

// Example observer from one of my fragments
    val timeObserver = Observer<Double> { newTime ->
      addDataPoint(mSharedStateDataViewModel.mStateDataSet, newTime)
    }
    mSharedStateDataViewModel.mTime.observe(viewLifecycleOwner, timeObserver)

最佳答案

您应该使用以下内容更新 livedata 值

mTime.postValue(time)

另外,作者:Tenfour04 comment

postValue will result in the observers being called after this function returns. setValue results in the observers being called before setValue returns, so before the rest of the code in this function.

关于android - 观察者何时需要实时数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61535773/

相关文章:

Android 无法从由 NetworkSolutions DV CA 签名的端点下载 APK

kotlin - 在父类(super class)型上键入的属性 getter ,而不是在 Kotlin 中的实现

android - ViewModel和LiveData Observer不调用

android - 将 ArrayAdapter 与 LiveData 结合使用。

android - LiveData 观察永远不工作

java - if 语句比较 android java 中的星期几总是返回 true

android - 单击按钮时隐藏/显示选项菜单

android - Kotlin 版本 1.1.4-eap-77 不工作

arraylist - 解释一下为什么显示警告未选中强制转换source.readArrayList(data!!.javaClass.classLoader) as ArrayList<Data>?

java - 我们可以在App模块中使用库模块的资源吗?