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
安卓底层都是面向抽象编程,有直接新建类去实现(接口类是比抽象类还要抽象的)
开发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