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

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. A Game of Thrones(16) - Edard

    “They’ve found her, my lord.” Ned rose quickly. “Our men or Lannister’s?” “It was Jory,” his steward ...

  2. mysql 数据库备份ubuntu

    安装 1 sudo apt-get update 2. sudo apt-get install mysql-server 3 sudo  apt-get install mysql-client 4 ...

  3. Hibernate 配置详解(7)

    hibernate.order_updates: Hibernate文档中提到,该配置用于在刷新一级缓存,提交UPDATE的时候,按照每类对象的主键顺序排序后再提交,可以在高并发情况下减少事务死锁的可 ...

  4. Android开发之使用URL訪问网络资源

    Android开发之使用URL訪问网络资源 URL (UniformResource Locator)对象代表统一资源定位器,它是指向互联网"资源"的指针. 资源能够是简单的文件或 ...

  5. 关于JVM的ClassLoader(转)

    众所周知,java是编译型的语言,写的是java文件,最后运行的是class文件,class文件是运行在JVM之中的,这时候就有一个问题,JVM如何装载class文件的?是通过ClassLoader来 ...

  6. hdu4602(矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4602 题意:对于每个数的分解,列出其元素的出现的个数. 1    2   3    4    5 1  ...

  7. hdoj 1395 2^x mod n = 1 【暴力】

    策略 : 观察可知,1 或者是能被2整除的数都不会求余等于1, 仅仅须要推断一下是不是除1之外的奇数,在依次查找2^x(mod(n)) ? = 1就能够了 难点:假设每次都是在原来的基础上×2 再推断 ...

  8. The Building Blocks-Enterprise Applications Part 2- Information Management and Business Analytics

    1. Business Analytic Applications Data Analytics Also referred to as 'Business Analytics' or 'Busine ...

  9. 算法学习 - 图的广度优先遍历(BFS) (C++)

    广度优先遍历 广度优先遍历是非经常见和普遍的一种图的遍历方法了,除了BFS还有DFS也就是深度优先遍历方法.我在我下一篇博客里面会写. 遍历过程 相信每一个看这篇博客的人,都能看懂邻接链表存储图. 不 ...

  10. SCSI miniport 驾驶一个简单的框架

    前段时间,只需用一台新电脑,由于资金有限没有匹配了心仪已久的SSD.我没感觉到飞翔的感觉,总不甘心,仔细想想.我死了相当大的存储,我们可以假设部分内存作为硬盘驱动器把它弄出来.不会比固态硬盘的速度快, ...