请从文章最后往前看
这个过程只包含从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
prpFormState)
BrowserFrame.java
loadUrl(String url, Map extraHeaders)
nativeLoadUrl(url, extraHeaders);
WebViewCore.java
transferMessages
case LOAD_URL:
loadUrl(String url, Map extraHeaders)
mBrowserFrame.loadUrl(url, extraHeaders);
mProvider --> WebViewClassic
mWebViewCore.sendMessage(EventHub.LOAD_URL, arg);
mProvider.loadUrlImpl(String url, Map extraHeaders)
mProvider.loadUrlImpl(String url)
mProvider.loadUrl(String url)
WebView.java loadUrl(String url)