Android WebView LoadUrl过程

来源:互联网 发布:faking it 编辑:程序博客网 时间:2024/06/05 08:31

请从文章最后往前看

这个过程只包含从java层调用到C++层的代码,至于如何获取到网络数据并加载到页面上并没有涉及。

本文只记录了loadurl的过程,源码基于android 4.2.2


#0 MessageLoop::PostTask



#1android::WebUrlLoaderClient::start


#2 android::WebUrlLoader::start


#3 WebCore::ResourceLoaderAndroid::start


#4 WebCore::ResourceHandle::start


#5 WebCore::ResourceHandle::create


#6WebCore::MainResourceLoader::loadNow


#7WebCore::MainResourceLoader::load


#8 WebCore::DocumentLoader::startLoadingMainResource


#9 WebCore::FrameLoader::continueLoadAfterWillSubmitForm


#10 WebCore::FrameLoader::continueLoadAfterNavigationPolicy


#11 WebCore::FrameLoader::callContinueLoadAfterNavigationPolicy


#12 WebCore::PolicyCallback::call


#13 WebCore::PolicyChecker::continueAfterNavigationPolicy


#14 android::FrameLoaderClientAndroid::dispatchDecidePolicyForNavigationAction


#15 WebCore::PolicyChecker::checkNavigationPolicy


#16 WebCore::FrameLoader::loadWithDocumentLoader


#17 WebCore::FrameLoader::load


#18 WebCore::FrameLoader::load


#19WebCore::FrameLoader::load




/external/webkit/Source/WebKit/android/jni/WebCoreFrameBridge.cpp
通过static JNINativeMethod gBrowserFrameNativeMethods映射java native方法为c++方法
{ "nativeLoadUrl", "(Ljava/lang/String;Ljava/util/Map;)V",
        (void*) LoadUrl },
LoadUrl(JNIEnv *env, jobject obj, jstring url, jobject headers)


WebCore::Frame* pFrame = GET_NATIVE_FRAME(env, obj);
WebCore::Frame是external/webkit/Source/WebCore/page/Frame.cpp
WTF::String webcoreUrl = jstringToWtfString(env, url);
    WebCore::KURL kurl(WebCore::KURL(), webcoreUrl);
    WebCore::ResourceRequest request(kurl);
pFrame->loader()->load(request, false);
pFrame->loader()返回 &m_loader
类型是FrameLoader,路径
external/webkit/Source/WebCore/loader/FrameLoader.cpp
load(const ResourceRequest& request, bool lockHistory)
load(const ResourceRequest& request, const SubstituteData& substituteData, bool lockHistory)
load(DocumentLoader* newDocumentLoader)
loadWithDocumentLoader(DocumentLoader* loader, FrameLoadType type, PassRefPtr<FormState> prpFormState)




BrowserFrame.java
loadUrl(String url, Map<String, String> extraHeaders)
nativeLoadUrl(url, extraHeaders);


WebViewCore.java
transferMessages
case LOAD_URL:
loadUrl(String url, Map<String, String> extraHeaders)
mBrowserFrame.loadUrl(url, extraHeaders);




mProvider --> WebViewClassic
mWebViewCore.sendMessage(EventHub.LOAD_URL, arg);
mProvider.loadUrlImpl(String url, Map<String, String> extraHeaders)
mProvider.loadUrlImpl(String url)
mProvider.loadUrl(String url)


WebView.java loadUrl(String url)
0 0
原创粉丝点击