含义本身防止网络数据图片

webSettings.setBlockNetworkImage(true);

停止发布数据

webSettings.setBlockNetworkImage(false);





造成这么强大的功力

我们来看下详细的实现

WebSettingsClassic.java

    /**

     * @see android.webkit.WebSettings#setBlockNetworkImage(boolean)

     */

    @Override

    public synchronized void setBlockNetworkImage(boolean flag) {

        if (mBlockNetworkImage != flag) {

            mBlockNetworkImage = flag;

            postSync();

        }

    }

关键代码看上去仅仅有

mBlockNetworkImage = flag;

可是不要忽略了

postSync();

这个就是通知c++层去读取mBlockNetworkImage数值

我们看下详细的postSync函数实现

    /* Post a SYNC message to handle syncing the native settings. */

    private synchronized void postSync() {

        // Only post if a sync is not pending

        if (!mSyncPending) {

            mSyncPending = mEventHandler.sendMessage(

                    Message.obtain(null, EventHandler.SYNC));

        }

    }





通知给

            // create a new handler

            mHandler = new Handler() {

                @Override

                public void handleMessage(Message msg) {

                    switch (msg.what) {

                        case SYNC:

                            synchronized (WebSettingsClassic.this) {

                                if (mBrowserFrame.mNativeFrame != 0) {

                                    nativeSync(mBrowserFrame.mNativeFrame);

                                }

                                mSyncPending = false;

                            }

                            break;





    // Synchronize the native and java settings.

    private native void nativeSync(int nativeFrame);

最后调用的函数





c++底层函数实现

WebKit/android/jni/WebSettings.cpp

//-------------------------------------------------------------

// JNI registration

//-------------------------------------------------------------

static JNINativeMethod gWebSettingsMethods[] = {

    { "nativeSync", "(I)V",

        (void*) WebSettings::Sync }

};

    static void Sync(JNIEnv* env, jobject obj, jint frame)

    {

        WebCore::Frame* pFrame = (WebCore::Frame*)frame;

        ALOG_ASSERT(pFrame, "%s must take a valid frame pointer!", __FUNCTION__);

        WebCore::Settings* s = pFrame->settings();

        if (!s)

            return;

        WebCore::CachedResourceLoader* cachedResourceLoader = pFrame->document()->cachedResourceLoader();





        flag = env->GetBooleanField(obj, gFieldIds->mBlockNetworkImage);

        s->setBlockNetworkImage(flag);

        if(!flag)

            cachedResourceLoader->setBlockNetworkImage(false);

   }









详细实现

CachedResourceLoader.cpp里面

void CachedResourceLoader::setBlockNetworkImage(bool block)

{

    if (block == m_blockNetworkImage)

        return;





    m_blockNetworkImage = block;





    if (!m_autoLoadImages || m_blockNetworkImage)

        return;





    DocumentResourceMap::iterator end = m_documentResources.end();

    for (DocumentResourceMap::iterator it = m_documentResources.begin(); it != end; ++it) {

        CachedResource* resource = it->second.get();

        if (resource->type() == CachedResource::ImageResource) {

            CachedImage* image = const_cast<CachedImage*>(static_cast<const CachedImage*>(resource));

            image->setAutoLoadWasPreventedBySettings(false);

            if (image->stillNeedsLoad()) {

                image->setLoading(true);

                load(image, true);

            }

        }

    }

}





最终找到这个家伙了,原来搞了一个循环在呼呼的运行,发送一个个的网络请求

总体运行流程如今来看基本清晰了。

上面代码是针对android4.1.1版本号代码的分析

假设对这篇讲的技术有不论什么疑问,第一时间获得文章更新,每天公布一篇技术大牛的原创文章。很多其它技术信息分享。

欢迎关注个人微信公众平台:程序猿互动联盟,扫一扫下方二维码或搜索微信号coder_online就可以关注,在线帮您解决技术难点,给大牛直接出难题。

联系方式

QQ:390012381

微信:donghuitalk

转载请注明出处:http://blog.csdn.net/lihui130135

版权声明:本文博主原创文章,博客,未经同意不得转载。

Android 浏览器开发WebView setBlockNetworkImage本末的更多相关文章

  1. android 浏览器开发实例

    android app需要通过手机显示网页信息还是比较常用的,比如我最近业余开发的 抢商铺游戏,需要对游戏规则做说明,规则会比较多,而且要经常变动,就想到用网页来展示,更新起来方便,不像应用,一旦发布 ...

  2. Android应用开发 WebView与服务器端的Js交互

    最近公司再添加功能的时候,有一部分功能是用的html,在一个浏览器或webview中展示出html即可.当然在这里我们当然用webview控件喽 WebApp的好处: 在应用里嵌套web的好处有这么几 ...

  3. Android使用开发WebView战斗技能

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/44619181 前段时间做项目的时候.在项目中用了WebView组件,遇到了一些问题 ...

  4. android浏览器开发小技巧集锦(转)

    本人和朋友们做了一段时间浏览器,将一些小技巧分享出来,先写一部分,慢慢写,同时也为我们的浏览器打打广告 我们的浏览器将要上线,名叫沙发浏览 1.网页内的右键菜单 public boolean onLo ...

  5. Android 浏览器 —— 使用 WebView 实现文件下载

    对当前的WebView设置下载监听 mCurrentWebView.setDownloadListener(new DownloadListener() { @Override public void ...

  6. 分享:用 NDK C++做底层开发的Android 浏览器,纯免费,无广告

    分享:用 NDK C++做底层开发的Android 浏览器,纯免费,无广告 操作简单,傻瓜一看就会 无毒.无广告.无负作用,完全免费 下载地址1:http://awdjcfeizb.l33.yunpa ...

  7. Android应用开发中webview上传文件的几种思路

    1. 常规方法,重写WebChromeClient 的 openFileChooser 方法 private class MyWebChromeClient extends WebChromeClie ...

  8. Andriod开发之浏览器开发(WebView)

    1.创建一个WebView在XML文件 <WebView android:id="@+id/webView" android:layout_width="match ...

  9. android 下 利用webview实现浏览器功能

    android 下 利用webview实现浏览器功能(一): 1.界面添加WEBVIEW控件. 2.在界面.JAVA代码页面(protected void onCreate(Bundle savedI ...

随机推荐

  1. java多线程:ReentrantReadWriteLock读写锁使用

    Lock比传统的线程模型synchronized更多的面向对象的方式.锁和生活似,应该是一个对象.两个线程运行的代码片段要实现同步相互排斥的效果.它们必须用同一个Lock对象. 读写锁:分为读锁和写锁 ...

  2. UVA796- Critical Links(无向图中的桥梁)

    题目链接 题意: 给出一个无向图,按顺序输出桥 思路:求出全部的桥,然后按顺序输出就可以 代码: #include <iostream> #include <cstdio> # ...

  3. cocos2dx-3.0(1)------win7 32位android环境搭建

    參照链接http://blog.csdn.net/wonengxing/article/details/23601359 ----我的生活,我的点点滴滴!! 一. Android工具安装 1. 安装J ...

  4. ubuntu 经常使用软件及环境

    安装完系统后,更新系统 sudo apt-get update # 更新源索引 sudo apt-get dist-upgrade # 更新系统 sudo apt-get autoremove 1安装 ...

  5. android 在特殊应用的特殊功能,以帮助通信系统的问题

    在实际工程中的应用,进入一个特殊的应用后,系统的某个功能不能起作用. 当然,这个通信有非常多办法能够做到.笔者能够想到的至少有例如以下几种 1.利用property熟悉来实现,这种话须要添加一个特殊的 ...

  6. zoj3329(概率dp)

    题目连接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3754 题意:有三个骰子,分别有k1,k2,k3个面. 每次掷骰子,如 ...

  7. I2C操作笔记——以 AT24C04为例

    1.前言     对于大多数project师而言,I2C永远是一个头疼的问题.相比UART和SPI而言,I2C的时序要复杂一些,I2C组合变化也丰富一些.在这里以AT24C04为例说明I2C使用过程中 ...

  8. 单片机实验: 三轴磁场模块 GY-271

    最近买了一块三轴磁场模块进行实验 名称:HMC5883L模块(三轴磁场模块) 型号:GY-271 使用芯片:HMC5883L 供电电源:3-5v 通信方式:IIC通信协议 测量范围:±1.3-8 高斯 ...

  9. 从头来之【图解针对虚拟机iOS开发环境搭建】 (转)

    1.下载Mac OSX10.9. 点击下载 2.下载VMware Workstation 10,点击下载,网页中包含序列号.安装VM. 3.VM10-MacOS补丁.用于创建苹果虚拟机. 安装VM就不 ...

  10. hdu3899(树形dp)

    题意:给一树,每个结点有人数,边有权值,表示经过这条边所需时间, 问取某个结点作为开会地点,所有人全部到达此结点最少所需总时间? 分析:val[u]表示以u为根节点的总人数,num[u]表示以u为根节 ...