课后练习

一、单项选择题

每题只有一个正确答案。

  1. 使用 Intent 在 Activity 之间传递字符串数据时,用于写入数据的方法是( )。

    A. getStringExtra()

    B. putExtra()

    C. startActivity()

    D. finish()

  2. Media3 中,PlayerView 的主要作用是( )。

    A. 创建 ExoPlayer 对象

    B. 准备待播放的媒体数据

    C. 显示视频画面和播放控件

    D. 释放播放器占用的资源

  3. 播放器状态为 Player.STATE_READY 时,表示( )。

    A. 媒体已准备完成,具备播放条件

    B. 媒体数据正在缓冲,尚不能继续播放

    C. 媒体已播放到末尾

    D. 播放器已经释放

  4. 调用播放器的 seekTo() 方法,主要用于( )。

    A. 设置播放音量

    B. 释放播放器资源

    C. 暂停播放并保留当前位置

    D. 跳转到指定的播放位置

  5. Activity 从可见变为完全不可见时,通常会调用哪个生命周期方法?( )

    A. onCreate()

    B. onStart()

    C. onStop()

    D. onDestroy()

  6. 调用 ExoPlayer.release() 的主要作用是( )。

    A. 暂停播放并保留播放器供后续使用

    B. 释放播放器占用的资源

    C. 更换媒体地址并自动播放

    D. 将播放位置调整到起点

  7. 在加载媒体前检查播放地址是否为空,主要是为了( )。

    A. 避免将空地址作为媒体来源传入播放器

    B. 确认媒体服务器能够正常访问

    C. 确认播放器支持该媒体格式

    D. 提前完成媒体数据的下载

  8. Player.Listener 中,用于接收实际播放状态变化的回调是( )。

    A. onIsPlayingChanged()

    B. onPlaybackStateChanged()

    C. onStopTrackingTouch()

    D. onProgressChanged()

  9. Kotlin 中,对 Long 类型的数值调用 toInt(),其作用是( )。

    A. 将毫秒换算为秒

    B. 将数值重置为 0

    C. 将数值转换为 Int 类型

    D. 将数值自动限制在进度条的最大值以内

  10. 释放播放器后,将保存该对象的可空引用设为 null,主要是为了( )。

    A. 重新创建一个播放器对象

    B. 将播放器切换为播放结束状态

    C. 自动保存最后的播放位置

    D. 清空该引用,便于后续代码通过判空避免继续使用已释放的对象

二、拓展实践

  1. 为歌曲列表增加刷新功能,用户刷新后重新获取并显示歌曲数据。当列表没有歌曲时,显示清晰的空数据提示,并提供再次刷新的入口。

  2. 让视频播放页支持横竖屏切换,并分别调整视频画面、歌曲信息和播放控件的布局。切换后,画面比例应合理,文字和控件不能重叠,播放位置及播放、暂停状态应保持一致。

  3. 新增歌曲详情页,并在歌曲列表中设置进入详情页的入口。思考:用户需要查看哪些歌曲信息?页面应包含哪些界面部分?可以提供哪些操作?先绘制页面草图,再实现页面及主要功能。

三、参考答案

选择题答案

题号答案考查内容
1BIntent 参数传递
2CPlayerView 的作用
3ASTATE_READY 的含义
4DseekTo() 跳转播放位置
5CActivity 不可见时的生命周期回调
6B播放器资源释放
7A加载媒体前检查空地址
8A实际播放状态变化回调
9CLong 转换为 Int
10D释放播放器后清空引用

拓展实践评价要点

  1. 刷新后能够显示最新数据;列表为空时提示清晰,用户仍可再次刷新;刷新失败与没有数据的提示能够区分。

  2. 横竖屏布局均能完整显示视频和主要控件,画面比例合理;切换后播放位置和状态正确,播放控制及进度拖动仍可正常使用。

  3. 页面草图能体现信息分区和操作入口;详情页显示所选歌曲的信息,布局清晰,主要功能可用,并能返回歌曲列表。