Android权威编程指南笔记 第二十一章 音频播放与单元测试(未完)

第二十一章 音频播放与单元测试

一. 音频播放

  1. 使用SoundPool
  2. 加载音频文件
  3. 播放音频
  4. 释放音频

1. 使用SoundPool

  1. 兼容低等级版本, 使用SoundPool(int, int, int )的构造方法. 另有SoundPool.Builder方法.
  2. 三个参数分别为同时播放的个数, 音频流类型, 不起作用的采样率转换品质.
  3. 不同的音频流类型相互之间不会受影响. 在AudioManager类里可以看到其他控制选项. STREAM_MUSIC时音乐和游戏常用的音量控制常量.

2. 加载音频

  • 通过AssetsManager找到assets文件夹下的文件.
    AssetFileDescriptor afd = mAssets.openFd(sound.getAssetPath());
  • 存入SoundPool中, 并返回一个int类型的值.
        int soundId = mSoundPool.load(afd, 1);
        sound.setSoundId(soundId);

3. 播放音频

  1. SoundPool.play(soundId, 1.0f, 1.0f, 1, 0, 1.0f);
  2. 参数分别为 音频ID, 左音量, 右音量, 优先级, 是否循环(0不循环, -1循环), 播放速率.
        Integer soundId = sound.getSoundId();
        if(soundId == null){
            return;
        }
        mSoundPool.play(soundId, 1.0f, 1.0f, 1, 0, 1.0f);

4.释放音频

  • SundPool.release() 每次可在onDestory()中调用.

二. 单元测试

  1. 添加测试依赖
  2. 创建测试类
  3. 创建虚拟对象
  4. @Test注解
  5. 运行测试

1.添加测试依赖

  • org.mockito:mockito-coreorg.hamcrest:hamcrest-junit依赖
  • 将两个导入的依赖定义为testImplementation. 表明只需在应用的测试编译里, 而无需在APK包中添加无用的代码.

2.创建测试类

  • 在视图模型文件中 使用快捷键 ctrl+shift+T创建Junit测试类.
  • 选择setUp/@Before //以@Before注解的公共代码会在所有测试之前运行一次
  • 选择test(单元测试). 另一个是androidTest(整合测试)

3.创建虚拟对象

  • BeatBox mBeatBox = mock(BeatBox.class);

4.用 @Test 注解

  1. @Test注解的测试方法
    @Test
    public void exposesSoundNameAsTitle(){
        //将SoundViewModel视图模型模拟出来,
        //与mSound中的东西进行比较,得出相应的测试结果
        assertThat(mSubject.getTitle(), is(mSound.getName()));
    }

    @Test
    public void callsBeatBoxPlayOnButtonClicked(){
        mSubject.onButtonClicked();//调用方法
        verify(mBeatBox).play(mSound);//验证以mSound作为参数的play()方法是否被调用
    }

5.运行测试

运行测试

整合测试(未完)(P351)

  • espresso是Google开发的UI测试框架
  1. 添加依赖esspresso-core依赖项, 作用范围改为AndroidTestImplementation

相关小记

  • 对于单元测试, 快速创建的Mokito非常有用.
  • 对于整合测试, 避免使用mokito自动虚拟测试框架.
  • 不可保存性有向外传递的机制
  • 设备旋转造成的声音停止
    fragmentonCreate()中使用setRetainInstance(true), 此方法会保留fragment的实例以便于重建.
    必须同时满足以下两个条件
    1.调用了setRetainInstance(true)
    2.因设备配置改变(通常为设备旋转), 托管activity正在被销毁. fragment只能保留非常短的时间. 如果是因为activity被系统回收内存而被销毁, 则所有保留的fragment也会随之被销毁, 数据也就跟着丢失.

挑战练习

  • 播放音频的进度控制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值