android高性能webview之crosswalk

下载地址

对着 demo工程比较容易将crosswalk嵌入自己的项目中,下面是一些需要注意的地方:

  • 因为完整引入包体会变得很大,适当的可以采用下载核心库的方式,在运行时动态加载。大概有十几M的样子,似乎还是蛮大的。

  • 笔者在最新的版本中,AudioContext.decodeAudioData解码MP3会出现错误,没弄明白原因,故如果使用AudioContext播放音频可以直接使用pcm格式音频,无需解码。下面是笔者测试过,播放pcm的演示代码:

window.AudioContext = window.AudioContext || window.webkitAudioContext|| window.mozAudioContext;
window.audioContext = new AudioContext();
//audioData:获取的wav二进制数据,默认采用单声道 32位的pcm数据(必须!!!!)
function getAudioBuffer(audioData){
//去掉最开始的文件头,保留原始的pcm数据。为了简化,这里不读取文件头信息,直接取大概值60。
                audioData=audioData.slice(60);
                //4字节对齐,因为AudioBuffer 必须要4字节对齐
                var frames=parseInt(audioData.byteLength/4);
                //1表示创建1个声道,跟wav的声道数没有关系的。
                //frames音频 总帧数
                //32000音频采样率 ,也就是1秒 采集的帧数
                var buffer = window.audioContext.createBuffer(1,frames, 32000);
                var aBuf=audioData.slice(0,frames*4);
                var arrBuffer=new Float32Array(aBuf);
                if (buffer.copyToChannel) {
                    //把音频数据 复制到AudioBuffer的 0声道索引。 如果创建了多个声道,可以给后面的声道 继续赋值
                    buffer.copyToChannel(arrBuffer, 0, 0)
                } else {
                    var channelBuffer = buffer.getChannelData(0);
                    channelBuffer.set(arrBuffer);
                }
                return buffer;
}
function play(audioBuffer){
  var audioBufferSouceNode = audioContext.createBufferSource();
  audioBufferSouceNode.buffer = audioBuffer;
  source.connect(audioContext.destination);
  //第一个为延迟播放的时间,第二个为 播放的偏移位置,以秒为单位
  audioBufferSouceNode.start(0, 0);
}
  • 虽然能比较好的解决android兼容和性能问题,但是如果不运行h5游戏等 耗性能的程序,直接使用android自带的webview也是可以的了-_-

你可能感兴趣的:(技术,编程)