我正在开发一款 Android 应用程序,该应用程序可以训练玩家的耳朵,让他们用吉他重放从手机中听到的任何内容。我按以下方式制作了音符(和和弦)识别部分:一个显示信息并监听按钮的主线程,一个记录声音并发送要分析的数据的 AsyncTask
以及另一个AsyncTask
分析并确定已演奏的音符。
注释识别是实时的,因此我将分析器 AsyncTask
放置在 ViewModel
中。识别的音符和和弦保存在 LiveData
字段中,因此每当它们发生变化时,主线程(由 View
表示)就会收到通知。
现在我正在开发一款使用这种识别的游戏,但我也打算制作一个调谐器。游戏和调音器将使用相同的识别算法。
我的问题是:我应该如何处理这个问题? 游戏和调谐器也将拥有自己的功能。我应该将分析器 ViewModel
与单个游戏和调谐器 ViewModel
分开吗?这意味着我将为这两个 Views
中的每一个使用两个 ViewModels
。我认为我不应该在两个单独的 ViewModels 中重复分析器代码,而且我也不应该为游戏 和 对于同一ViewModel
中的调谐器,因为会有无用的代码(游戏永远不会使用单独的调谐器> 功能)。
最佳答案
实际上,您应该在您的模型
中使用通用识别算法(甚至在独立于模型
的某些服务层中),而不是在您的 ViewModel
中。 ViewModel
旨在绑定(bind)到 View
,而不是执行笔记识别等业务逻辑。
在这种情况下,ViewModel
将负责将录音发送到 Model
,后者将它们保存为 LiveData
对象。 ViewModel
检索它们并将它们作为 LiveDataViewModel
对象公开给 View
。
关于android - 一个 ViewModel 用于多个 View 还是多个 ViewModel 用于单个 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60135851/