Android MediaPlayer状态图明晰注释

2024-03-31 08:08

本文主要是介绍Android MediaPlayer状态图明晰注释,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

田海立

2012-03-20

看Android ReferenceManual中MediaPlayer描述的状态机,那个状态图,看起来很复杂。笔者在初看到时也感觉一团乱麻,便试着按照状态转化的理解,先忽略一些不是特别重要的分支,自己绘制了一幅MediaPlayer的状态图。发现,跟AndroidSDK中的图呈现的内容是一致的,但是看起来却无比明晰,分享一下。


关于MediaPlayer状态的转换,Android SDK手册中已经有了明确的表述,这里笔者只是强调一些,SDK手册中明确表述的实际工作中遇到的问题点:

1.      异步Prepare

MediaPlayer可以播放网络资源的Media,所以在prepare()同步调用时,不确定什么时间能返回。而如果prepare()是在UIThread执行的话,长时间等待没返回的话就会产生ANR。MediaPlayer提供了异步Prepare方式,那就是注册MediaPlayer.OnPreparedListener,然后调用prepareAsync(),马上结束当前的调用,等真正prepared之后,再在MediaPlayer.OnPreparedListener#onPrepared()中执行Prepared之后的操作。

2.      Prepared之后才能进行的操作。

严格按照状态图的状态转换来操作,不然会有对处于某一状态的非法操作。

特别地,很多操作要等Prepared之后才能操作,比如:getDuration()/seekTo()。这点在处理本地Media文件时不突出,在处理流媒体时,要特别注意。

3.      释放

MediaPlayer在不用的时候要用release()释放掉。

注意这里因为MediaPlayer也有pause()操作,可以暂停,所以不注意的话,会在Activity的onPause()中调用MediaPlayer.pause(),这样做是不恰当的。

在MediaPlayer#pause()中并不会释放底层占用的资源,这样别的Activity如果要用一些公共资源的话,就得不到了。正确的做法是,在不需要播放时,记录下当前的位置,并用MediaPlayer#release()释放;需要播放时再从重新初始化,并seek到记录的位置,从那里开始播放。

当然也不要那么教条,应根据你的实际需要,灵活运用。

这篇关于Android MediaPlayer状态图明晰注释的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/863847

相关文章

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Python中的输入输出与注释教程

《Python中的输入输出与注释教程》:本文主要介绍Python中的输入输出与注释教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、print 输出功能1. 基础用法2. 多参数输出3. 格式化输出4. 换行控制二、input 输入功能1. 基础用法2. 类

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

Rust中的注释使用解读

《Rust中的注释使用解读》本文介绍了Rust中的行注释、块注释和文档注释的使用方法,通过示例展示了如何在实际代码中应用这些注释,以提高代码的可读性和可维护性... 目录Rust 中的注释使用指南1. 行注释示例:行注释2. 块注释示例:块注释3. 文档注释示例:文档注释4. 综合示例总结Rust 中的注释

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后