完整的Android MVP开发之旅

2019-12-10 18:59:28刘景俊

数据模型
数据模型中包含大量的ITrainable对象,对内组织数据对外提供数据支持。对数据的组织方式主要分两种:

  • 从本地数据库
  • 从网络获取

    在训练器中可能是正常的训练或是一次训练测试而训练数据和测试数据又有一些差异但它们的数据都被当做ITrainable,测试数据是不需要保存的只需要从服务器拉取后按要求完成就行而训练是会产生本地记录的。
    针对不同数据组织方式提供不同的数据模型这是有必要的。

    音频
    音频比较多样化像训练过程中包含动作名、时间、单位词、提醒等音频这些音频都是分开的不同的音频文件。Android主要有两种实现方式:

    • SoundPool
    • MediaPlayer

      首先说SoundPool优点自然就是免去了加载、管理音频等过程但是它并不适应我们的训练器,主要原因是缺少准备、完成后的一些回调而在训练器运行过程中这些过程必不可少比如在播放完一段预备开始后音频这时我们才能进行正式的训练。
      最后是采用MediaPlayer,但是在使用过程又要考虑到音频的集中管理与资源的释放免不了多封装一次。设计时我将全部音频逻辑放在Android Service中Activity通过bind AudioService来使用音频,将音频逻辑放入AudioService这样可以音频完
      全独立起来使其能在后台播放并且也可以提高进程优先级。

      完整的Android MVP开发之旅

      在设计中AudioService仅仅播放与管理音频和资源并不具备音频播放的逻辑功能。由于不同的训练方式音频的播放逻辑也有不同之处所以在此设计IAudioFlow接口来负责音频逻辑。

      训练视图
      Android常用Activity作为视图,通过实现ITrainerView接口来完成训练视图的显示。视图中不包含任何业务逻辑代码。