课后练习

单项选择题

每题只有一个正确答案。

  1. 使用 startService() 启动的服务,在客户端解除绑定后通常会怎样?( )

    A. 服务立即停止

    B. 服务仍可继续运行,直到被明确停止

    C. 服务自动转为前台服务

    D. 服务只能再运行一秒

  2. 本地绑定服务通过什么对象向客户端提供访问服务的入口?( )

    A. Intent

    B. Bundle

    C. IBinder

    D. Handler

  3. 使用 MediaPlayer 准备在线音频时,调用 prepareAsync() 的主要作用是什么?( )

    A. 在准备完成前暂停主线程

    B. 异步准备音频,准备完成后通过回调继续处理

    C. 让播放器自动重复播放

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

  4. 更换 MediaPlayer 的音频来源前调用 reset(),主要是为了什么?( )

    A. 清除播放器当前状态,便于设置新的音频来源

    B. 立即开始播放新的音频

    C. 保留当前播放位置

    D. 关闭应用的网络连接

  5. 不再使用 MediaPlayer 时,应该调用哪个方法释放它占用的资源?( )

    A. pause()

    B. reset()

    C. release()

    D. seekTo()

  6. MutableStateFlow 和 StateFlow 的常见分工是什么?( )

    A. 两者都只能读取状态

    B. MutableStateFlow 用于更新状态,StateFlow 用于只读地观察状态

    C. StateFlow 用于更新状态,MutableStateFlow 用于只读地观察状态

    D. 两者都只能在主线程创建

  7. 状态已经发生变化后,新的收集者开始收集 StateFlow,会先得到什么?( )

    A. 创建 StateFlow 时的初始值

    B. 只有之后发生变化时才会得到状态

    C. 所有历史状态的副本

    D. 当前保存的最新状态

  8. 使用 SupervisorJob 管理多个协程时,其中一个协程发生异常会怎样?( )

    A. 其他协程一定会同时取消

    B. 整个应用会自动关闭

    C. 出错的协程会自动重新启动

    D. 其他协程不会因此自动取消,但异常仍需处理

  9. Dispatchers.Main 作为协程的默认调度器时,协程代码通常在哪个线程运行?( )

    A. Android 主线程

    B. 新建的子线程

    C. 文件读写专用线程

    D. 由系统随机选择的线程

  10. 用户拖动进度条时,为什么要暂时跳过自动进度刷新,并在松开后再执行跳转?( )

    A. 避免自动刷新覆盖用户选择的位置,松开后再跳到目标位置

    B. 让播放器在拖动期间自动切换歌曲

    C. 让进度条最大值随拖动改变

    D. 避免播放器读取音频来源

参考答案

题号答案考查知识点
1B已启动服务与绑定关系
2C本地服务绑定与 IBinder
3B在线音频的异步准备
4A重置播放器状态
5C释放播放器资源
6B可变状态流与只读状态流
7DStateFlow 保存并提供最新状态
8DSupervisorJob 对协程异常的处理方式
9ADispatchers.Main 的默认线程
10A进度条拖动与播放位置同步