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

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. 在不同版本号hdfs集群之间转移数据

    在不同版本号hdfs集群之间转移数据     最简单的办法就是把src集群的数据导到本地,然后起还有一个进程将本地数据传到des集群上去. 只是这有几个问题: 效率减少 占用本地磁盘空间 不能应付实时 ...

  2. 苹果iOS手机系统诊断功能是后门吗?

    7月20日,美国知名苹果iOS手机系统侦破专家扎德尔斯基在2014年世界黑客大会(HOPE/X)用幻灯片讲演揭露了苹果手机存在系统级"后门". 为此,7月23日.苹果公司马上做出回 ...

  3. 在Mybatis中使用注解@多个參数查询

    @Select("SELECT * FROM wc_homework WHERE organization_id=#{classId} ORDER BY createtime DESC LI ...

  4. storm-编程入门

    一 编程接口                                           watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbm ...

  5. 使用Intent启动组件

    android应用程序的三大组件--Activities.Services.Broadcast Receiver,通过消息触发,这个消息就是Intent,中文又翻译为"意图"(我感 ...

  6. spring 定义自己的标签 学习

    自己的自定义配置文件spring 在,有时你想要做一些配置信息的数据结构.基于扩展生意做. 首先: 在项目META-INF文件夹中创建两个文件spring.handlers,和spring.shcem ...

  7. SlidingMenu开源项目滑动界面的实现总结

    先上图 须要准备的是先得在GitHub上下载ActionBarSherlock-master.zip,和SlidingMenu-master.zip这两个开源文件,然后解压这两个包,SlidingMe ...

  8. 强势围观,CSDN代码引用bug

    看我写的一篇blog  http://blog.csdn.net/laijieyao/article/details/41014355,在代码上引用了微软雅黑的字体,结果代码显示出来把我给惊呆了 竟然 ...

  9. android各种资源的详细解释

    1.字符数组      使用字符串数组资源<string-array>标签定义,在<string-array>包括一些标签<item>数组元素标记.   例如 &l ...

  10. 安卓SDK更新host文件地址

    之前在安装jdk时,安装进度一直很缓慢,在更新这个(两个任选,都有效)host文件地址后,瞬间就可以了. 203.208.46.146 dl.google.com 203.208.46.146 dl- ...