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

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. android--手机桌面添加网址链接图标(解决方式)

    这样的做法最普遍最简单: 1.新建一个android空项目: 2.在drawable文件夹下加入图标文件,如icon.png:在values文件夹下的strings.xml文件里添加名称.如websi ...

  2. CF 518D(概率dp)

    传送门:Ilya and Escalator 题意:有n个人排队进车厢,每秒只能进一个人,而且第1个人进了后面的人才能进,第一个人每秒进入车厢的概率为p,不进的概率为1-p,求t秒后进入车厢总人数的数 ...

  3. POJ 3589 Number-guessing Game(简单题)

    [题目简述]:两个四位数,假设后一个数中的某个数与前一个相应的数的位置和值都相等.则统计数目由几个这种数.记为count1吧. 假设后一个数中的某个数与前一个数的数值相等,但位置不同. 此时这种数的个 ...

  4. hdu3033(变形分组背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3033 题意:Iserlohn要买鞋,有k种牌子,每种牌子至少买一双鞋子.每双鞋子有标价跟实际价值.求用 ...

  5. 用Python的Tkinter实现时钟

    import Tkinter,sys,time root=Tkinter.Tk() root.minsize(, ) Label1=Tkinter.Label(text=time.strftime(' ...

  6. 每天一个JavaScript实例-html5拖拽

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  7. hdu 4472 Count (2012 ACM-ICPC 成都现场赛)

    递推,考虑到一n可以由i * j + 1组合出来,即第二层有j个含有i个元素的子树...然后就可以了.. #include<algorithm> #include<iostream& ...

  8. Cacti监控Tomcatserver实现过程

    1 首先去官网上面下载通用的监控模板 一般使用TomcatStats-0.1.zip 模板居多,下载地址: http://forums.cacti.net/download/file.php?id=1 ...

  9. EF 执行视图

    IEnumerable<V_stocks> summary = db.Database.SqlQuery<V_stocks>("SELECT * FROM dbo.V ...

  10. 每日回顾Shell —cat,tail,head

    Shell中常常会用到cat命令.可是总是不是特别清楚: cat命令的用途是连接文件或标准输入并打印. 这个命令经常使用来显示文件内容.或者将几个文件连接起来显示.或者从标准输入读取内容并显示,它常与 ...