首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MediaPlayer(总结)--从对象生命周期理解MediaPlayer状态

    binder通讯 mediaplayer和MediaPlayerService 通讯 并不是同MediaPlayerService在ServiceManager中注册的binder通讯的,而是通过下面两个...binder来通讯的 IMediaPlayer (mediaplayer --> MediaPlayerService) IMediaPlayerClient (MediaPlayerService...至此 NuPlayer --> MediaPlayerService notify --> mediaplayer notify的回调链路就建立,client的notify又会调用Idle状态设置的listener...将MediaPlayer 的所有listener置为null 释放对surface的引用 将mediaplayer 回调jni的listener置为null 销毁MediaPlayerService 跟...接口调用也会进入Error状态 这是底层的播放器即NuPlayer发生了错误,需要重新调用reset()方法,才能重新使用,即销毁NuPlayer,再重新创建。

    1.2K20

    MediaPlayer(二)--MediaPlayer基本框架

    MediaPlayer涉及的的文件路径 这里参考的是android8.1 的代码 JAVA类的路径: frameworks/base/media/java/android/media/MediaPlayer.java...不过笔者不太明白为什么不跟其他模块一样在java层使用binder通讯呢 NuPlayer是andriod原生的播放器,芯片厂家一般会替换成自己的播放器。...MediaPlayerService实际上持有的是MediaPlayerFactory, NuPlayer通过MediaPlayerFactory创建出来的,是典型的工厂设计模式 ?...Nuplayer的注册创建过程 MediaPlayerService 在构造函数中会去创建各个Player Factory, 并保存到sFactoryMap 中, 后续创建播放器会通过对应的type去获取到对应的...MediaPlayerService::MediaPlayerService() { ALOGV("MediaPlayerService created"); mNextConnId =

    1.3K20

    android中java.lang.IllegalStateException异常产生的原因及解决办法

    Exception in MessageQueue callback: handleReceiveCallback 11-09 13:33:56.080: E/MessageQueue-JNI(19865): java.lang.IllegalStateException...问题的本质就是这样的,那什么叫状态不一致,我们得用代码中来解析下才能看的懂了: 使用的时候我们应该都知道,MediaRecorder 和MediaPlayer 用的方法有哪些了 if (mMediaPlayer.isPlaying...这个错误我下篇文章再介绍我遇到的情况是什么样的,这里还是回到本bug的点子上 出现标题的bug就是stop release isPlaying这些函数会出现问题,而出现的问题就是java对象状态和NAtive...,不知道,后来查阅别人说的,释放的是jni的对象,而java对象只是把栈内存里面释放了,其实这里面我到现在还是没有搞明白是不是这个意思,这样就导致了本地对象的堆内存还是存在的,而jni对象里面什么都没有了...,能明白这个意思把,就导致的不一致 stop出现的原因就是:你想停止它(停止的对象是jni里面的),可惜的是你根本没有这个对象你怎么停止呢  这不就是出现了对象不一致了吗 isPlaying出现的原因也就是

    7.6K10

    自定义BaseAdapter完美解决ListView异常:java.lang.IllegalStateException这是代码使用方法原理另外

    后来我查代码,才发现,在我们更新过程中大部分使用到的是异步操作,但是如果网络很卡,然后又发出了大量的请求的话,那么就会出现这个问题。要怎么解决这个问题呢?...View getRootView() { root.setTag(this); return root; } } } 使用方法...我们在adaptor内部就封装了一个List用于保存用户传过来的List数据,我们这里只是对外部的list有一个引用,但是真正使用到的list,却是内部的List,通过每一次调用notifyDataSetChanged...()方法,则自动将内部的list数据与外部的list数据同步一次。...再调用父类的更新、这样,我们玩来玩去就是外部的list,并不会对内部listview使用到的list有任何影响。就完美屏蔽了这个异常了。

    65680

    java.lang.IllegalStateException: 2 matchers expected, 1 recorded. 问题解决的正确姿势

    一、背景 今天使用Mokito遇到一个类似的问题,找到了一篇关于EasyMock的类似的异常博客,参考这个思考解决了问题。 二、原文 EasyMock是一个不错的mock接口的框架。...大多数情况下都用着很爽,但是如果使用复杂的用法可能会出问题。 如果你把所有参数都传给需要mock的函数,没有问题。...但是不幸的是,我们得到了如下异常: java.lang.IllegalStateException: 2 matchers expected, 1 recorded....的使用说明: http://easymock.org/user-guide.html#verification-expectations 原文:https://weirdfellow.wordpress.com...可以在底层接口未开发完成即可测试自己的逻辑是否通。 比如环境不允许,包括本地无数据库,包括调用的外部接口没上线等。 可以在单元测试阶段发现很多粗心的错误,一些代码逻辑的错误等,极大提高编程质量。

    1K10

    JDK8的stream将list转Map对象时候报错:java.lang.IllegalStateException,解决

    JDK8有很多新特性,比如lambda表达式,函数式编程以及stream流的使用,这几个新特性,使用过之后就爱不释手了,比如将list集合通过stream可以直接转换成map对象。...如下: 错误信息说,employeeId=4429的值在集合中有重复的。 这个时候怎么解决呢? 我们可以使用toMap的另一个重载方法。带有去重的方法。...,注释上的解释如下: 简单一句话: 一种合并函数,用于解决两者之间的冲突与提供的相同键相关联的值到{@link Map#merge(Object, Object, BiFunction)}。  ...该合并函数有两个参数,第一个参数为当前重复key 之前对应的值,第二个为当前重复key 现在数据的值。...getClassName, Student :: getStudentName,  (value1, value2 )->{              return value2;  })); 凯哥这里就使用了第二种方案

    1.2K20
    领券