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加入了硬件加速的功能,瞬间图片压缩就完成了。
整个浏览器的的定制过程处处是坑,以上只是将遇到的主要问题及应对方法列出来了,都是干货。其他的都可以在网上搜索到,就不赘述了。
参考网上的例子,直接在原工程中把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加入了硬件加速的功能,瞬间图片压缩就完成了。
整个浏览器的的定制过程处处是坑,以上只是将遇到的主要问题及应对方法列出来了,都是干货。其他的都可以在网上搜索到,就不赘述了。
相关文章推荐
- 社交巨头三国杀:微信、WhatsApp、Line到底有啥区别?
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件