精选资讯

webview安卓版95 – 28百科知识网-k8凯发平台

webview安卓版95

webview与webviewprovider的初始化和工作流程分析

一、线程检查与webview创建

要确保webview的线程创建和使用保持一致性,意味着webview的创建必须在主线程中进行。这是为了确保webview的正常运行和避免线程冲突问题。

二、provider类的初始化流程揭秘

provider类的初始化是为了确定webviewprovider的子类。这一步骤的实现依赖于webviewfactory类,它在android 5.0之后将webview内核从webkit换成了chromium。采用工厂模式有助于实现内核实现与上层初始化的代码解耦。

在初始化流程中,核心逻辑装在getprovider()方法中。实际获取的factoryprovider类会通过反射创建真实的factoryprovider对象。那么如何确定应该获取哪个factoryprovider对象呢?这涉及到getproviderclass()方法的代码,它返回的provider类型主要有两种:chromium_webview_factory和null_webview_factory。

正常的加载结果大致分为两步:首先确定webview的packageinfo和context,然后根据这些信息加载库。

接下来,我们深入解析其中的一些关键方法和逻辑。例如,在getwebviewcontextandsetprovider()方法中,核心逻辑是获取和设置webview的context和provider。这里的重点是waitforandgetprovider()方法,它会调用webviewupdateserviceimpl类的相应方法,最终获取到webviewproviderresponse对象。在onwebviewproviderchanged()方法中,我们获取到了package对象,这个对象是在findpreferredwebviewpackage()方法中获取的,它会根据用户的选择和系统的稳定性来确定使用哪个package。

那么android是如何获取所有的package呢?答案在com.android.server.webkit.systemimpl中。原来,webview相关的package信息是存放在一个xml文件里面的,这个文件就是config_webview_packages.xml。它记录了android默认的system webview的package name以及用户可以在settings里面选择webview实现的信息。

接下来是loadnativelibrary方法的核心逻辑,主要是获取webview动态库的路径,并处理32位和64位系统的差异。这个动态库实际上是一个apk文件。在源码framework/base/native/webview中可以找到相关的cpp代码,其中涉及到了动态库的加载和内存映射等细节。

回到webview的初始化,会调用webviewfactoryprovider的createwebview方法。如果是加载的chromium,那么会返回一个webviewchromium对象。接下来会调用webviewchromium的init方法进行webview引擎的初始化,包括渲染等模块的加载。

至此,webview的初始化过程分析完毕。后续将继续探索provider类的工作流程以及webview加载动态库的细节。


webview安卓版95

你可能也会喜欢...