您的位置:首页 > 移动开发 > Android开发

android前端定制浏览器开发(干货)

2015-11-21 10:53 483 查看
一开始采用的是系统自带的webview,运行起来好好的,但是在不同机器上测试的时候,发现在不同的系统上的体验不一样。于是考虑程序自己带一个浏览器的方式,这样能保证程序的体验是一致的,从网上搜索了一下,觉得intel的crosswalk评价还可以,于是就采用了这个方案。

参考网上的例子,直接在原工程中把webview给替换了,但是运行起来的时候,程序直接退出了,对比了网上的例子,没有发现什么不对的。无奈之下,重新建立了一下最下的demo,运行一下,还是报错。将重载的方法都屏蔽了,只加载一个XWalkView运行,程序正常,于是判断某一个重载函数的运行出问题了。将重载分别屏蔽,定位到onPause这个函数的重载出问题了,直接在onPause里面将XWalkView相关的代码直接屏蔽了,同时也去掉了onResume里面的XWalkView代码也屏蔽了,其他的都取消屏蔽,没有问题。一开始将所有初始还的代码都写到了onCreate里面,但是发现出了问题了,将XWalkView创建后的初始化工作放在了onXWalkReady里面,同时猜想在onPause里面之所以出问题,与XWalkView还没有准备好有关系,于是增加了一个boolean变量,在onXWalkReady结束的时候才置为true,在onPause中判断XWalkView是否已经准备好,如果准备好才调用XWalkView的相关代码,运行一下,发现没有问题。

继续向下调试,在XWalkView中增加js调用相关处理代码,后发现js调用java没有反应,仔细排查,发现是import的@JavascriptInterface不对,原来的代码引用的是webview的,但是intel自己定义了一个,需要引用它自己的。修改后,可以调用了。增加微信分享功能,发现图片如果太大的话,分享就会失败,于是考虑压缩图片,用BitmapFactory.decodeByteArray(buffer, 0, buffer.length, newOpts);这个方法先获取一下图片尺寸,然后修改尺寸等参数后后继续调用这个函数做压缩,分享搞定了。

分享成功后需要回调,但是回调函数不在主界面上,因此采用消息的机制,将消息通知给主界面,调用XWalkView.evaluateJavascript通知给js处理。但是每次分享取消的话,回到界面上整个界面就死掉了,从网上查找了半天,最终从一句话中得到了启示,在onResp处理微信反馈的消息后,调用了finish()将WXEntryActivity界面干掉。

crosswalk的体验非常好,在所有机器上的体验都一样,并且对于加载本地缓存和加载服务器的处理做得非常好,如果断网的情况下,也可以加载本地的缓存,这样,整个应用的体验不输原生的程序。用js在前端做压缩图片处理的时候,原来的webview需要等好长时间,但是crosswalk加入了硬件加速的功能,瞬间图片压缩就完成了。

整个浏览器的的定制过程处处是坑,以上只是将遇到的主要问题及应对方法列出来了,都是干货。其他的都可以在网上搜索到,就不赘述了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 微信