• 音频播放(二)


    按(一)中所述,内存拷贝等很浪费空间,而且传递时容易出错。换种思路:在JNI层播放,将AudioTrack拿到底层来。

    尝试:先不管效率问题,解一帧播一帧,OK。效果:播放有些文件很卡,有些不是那么卡。

    思考卡的原因:解码慢?都是用这个解码,暂时排除;

                       解一帧播一帧中的间隙?修改,在JNI层开两个线程,一个解码,一个播放。

    实践:开播放线程时候遇到问题,JNIenv不能直接传递,子线程中不能直接使用,要新建JAVAVM再取,此处一直报错E:\myspace\videoActivity/jni/

    native.c:515: undefined reference to `JNI_CreateJavaVM'    ,查询JNI的英文手册,找不到解决办法 ,故放弃 。

          换种思路:在JAVA层开线程,并进行线程的一系列控制维护操作等,但线程里的事还是有JNI层做,以此避开上个线程报错问题。

    一、对JAVA多线程的学习java.lang.Thread

        Java多线程程序中经常用到的方法有以下几个:run(),start(),wait(),sleep(),notify(),notifyAll(),yield()线程的让步,join(),还有一个重要的关键字 synchronized。

        1、run()和start()  

        这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由Java的内存机制规定的。并且run()方法必须是

    public访问权限,返回值类型为void。

        1、 关键字Synchronized

        这个关键字用于保护共享数据,当然前提是要分清哪些数据是共享数据。每个对象都有一个锁标志,当一个线程访问该对象时,被Synchronized修饰的数据将被“上锁”,

    阻止其他线程访问。当前线程访问完这部分数据后释放锁标志,其他线程就可以访问了。

  • 相关阅读:
    Flex 医疗行程图
    java cmd 命令
    面向对象的ExtJS场景开发
    spring Integration服务总线

    Vue.js 渲染函数, JSX(未掌握,未学完)
    JavaScript--Array; Array.prototype
    Vue.js 响应式原理
    Turbolinks
    LINQ 操作符
  • 原文地址:https://www.cnblogs.com/wyqfighting/p/2827652.html
Copyright © 2020-2023  润新知