Android 混合编程 WebView原理 native通信C++

WebView底层原理

有些复杂 参考这篇就够了 https://www.jianshu.com/p/3e0136c9e748

重定向:WebViewClient拦截原本的url,替换自己想要的url,再用WebView去加载,这样可以知道用户在做什么事情,本地可以配合实现一些业务,注意要区别WebChromeClient。

Android 和JavaScript交互 (WebView与JavaScript的通信)

所有的混合开发框架,像微信小程序,React native

任何学习安卓的原理,都需要去看深入的源码

点击WebVieww进入

每个版本的WebView都不一样,有直接继承MockView,也有继承AbsoluteLayout

1.

 

2.

MockView :Mock数据常常与服务端开发相结合(网络),如开发一个功能的时候,需要后台服务器提供一个接口,供客户端去访问,从后台拿到相应的业务逻辑—数据。这个Mock就是正式接口还没写出来,但是可以开一个服务通过假的接口(Mock接口)提供假的数据,将调试和开发分离开来。

google为了方便改WebView底层的时间,就搞了个MockView

参考 http://androidxref.com/ 查看MockViewd的源码,随便选择一个版本进去http://androidxref.com/7.1.2_r36/

搜索MockView 

其地址 http://androidxref.com/7.1.2_r36/xref/cts/tests/tests/view/src/android/view/cts/MockView.java 其实是继承View

查找WebView的loadUrl()方法

来自于getFactory()

安卓底层都是面向抽象编程,有直接新建类去实现(接口类是比抽象类还要抽象的)

开发NDK封装一些库,也是利用抽象编程去做的

 

 

主要看来源

从native可以看出它的核心功能在java层什么都没做,它全部把这些参数提取出来塞给了C++

所以安卓底层基本核心功能是UND开发的,就是说,从java层分析解析WebView网页怎么去通信的一点用都没有

面试会常问这些源码问题,其实就是设计模式技巧,相当于解耦的目的

就是我这底层一变,可以用不同的浏览器内核去做WebView的底层,其实WebView就是调用API而已

底层的实现就是通过这框架的解束去解耦的,其实去分析这么多java的东西,一点用都没有

像面试官问的问题:看没看Framework源码?

然后看过一些课程资料,书籍,在java层去剖析一些java基础知识,一点用都没有,但是核心就是C++,如果没有Android NDK的概念,实际上对整个安卓的架构很难上升一个层次,对于我这种大多数本科生来说,只会搭搭客户端,网站这些前端的路子,自从刚上大四去公司实习,做的还不是Android岗位,而是做流媒体(音视频)开发,对推拉流进行人脸识别,(我现在还在上大学)那个时候我就在想Android做到哪种方向层次才行,也就是NDK底层像音视频领域再深入呐,就是人工智能嵌入底层C++,做成.so动态链接库,来供Android高性能开发的使用,所以作为底层最核心的东西是通过C++去做的

最核心的是C++如何去解析HTML文件,怎么实现JavaScript和Android native进行通信的

这是个大课堂,相当于要把整个浏览器的核心了解的很透彻

实际上C++做的部分是JavaScript的一个外部引擎,这个引擎可以去解析HTML文件声明的一些信息,通过这些信息跟底层硬件(如:GPU)去做渲染指令,WebView我们没去做其它事情,就只是去加载了一下url,内部的操作还得靠底层C++,去解析HTML文件,然后生成渲染帧,跟GPU进行交互,通过合成的方式去渲染到我们顶部的屏幕上。

JavaScript V8引擎官网

参考 https://www.jianshu.com/p/81f6ded64ab2

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alex-panda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值