blog of faywong

备案号: 浙ICP备2025185971号

  menu
41 文章
0 浏览
0 当前访客
ღゝ◡╹)ノ❤️

WebView getUserAgentString的副作用分析

源代码如下(以android 4.0.4为例):

public synchronized String getUserAgentString() {
    if (DESKTOP_USERAGENT.equals(mUserAgent) ||
        IPHONE_USERAGENT.equals(mUserAgent) ||
        !mUseDefaultUserAgent) {
        return mUserAgent;
    }

    boolean doPostSync = false;
    synchronized(sLockForLocaleSettings) {
        Locale currentLocale = Locale.getDefault();
        if (!sLocale.equals(currentLocale)) {
            sLocale = currentLocale;
            mUserAgent = getCurrentUserAgent();
            mAcceptLanguage = getCurrentAcceptLanguage();
            doPostSync = true;
        }
    }
    if (doPostSync) {
        postSync();
    }
    return mUserAgent;
}

其中后半段代码用于将当前locale设定同步到生成的UA中。所以该方法是有副作用的。

在一个使用了WebView的Activity里实例化完成和系统Configuration改变后都需要调用一次getUserAgentString()来让WebView的UA(前提是不要设置自己的UA,即没有针对此WebView调用过setUserAgentString)中locale分量与系统的设定保持一致。以免在访问多语言网站时出现适配问题。


标题:WebView getUserAgentString的副作用分析
作者:faywong8888
地址:https://blog.fay.wang/articles/2025/08/10/1754806337910.html