You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cordova Android应用修改系统字体大小后跳转首页并触发WebView销毁调用错误

我之前碰到过一模一样的问题,折腾了好一会儿才搞定!你的问题核心是Android系统调整字体大小触发了配置变更(Configuration Change),Cordova默认的主Activity处理逻辑会销毁并重建Activity,连带WebView也被销毁,重建后就会加载应用根页面;如果此时还有异步任务试图调用已销毁的WebView,就会抛出Application attempted to call on a destroyed WebView的错误。

下面给你几个靠谱的解决方案:

解决方案1:阻止Activity因字体缩放重建

我们可以修改Cordova主Activity的配置,让它声明能处理字体缩放相关的配置变更,避免Activity和WebView被销毁。

  1. 找到项目里的android/app/src/main/java/[你的包名]/MainActivity.java文件
  2. 修改Activity的@Config注解(如果是老版本Cordova,直接修改AndroidManifest.xml的<activity>标签),添加fontScale等关键配置项:
    @ActivityLabel(R.string.app_name)
    @MainActivity
    @Config(
        // 保留原有配置,追加下面这些值
        configChanges = "orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|smallestScreenSize|screenLayout"
    )
    public class MainActivity extends CordovaActivity {
        // 原有代码不变
    }
    
    若使用AndroidManifest.xml配置:
    <activity
        android:name=".MainActivity"
        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|smallestScreenSize|screenLayout"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
    </activity>
    
  3. 重点是加上fontScale,这是处理字体大小变更的关键配置项。
解决方案2:清理WebView销毁前的异步任务

如果你的应用有定时器、未完成的网络请求这类异步操作,它们可能在WebView销毁后仍尝试调用WebView方法,进而触发错误。我们可以在WebView销毁前主动清理这些任务:

  • JS层面:监听应用的pause事件,清理定时器、取消请求:
    // 示例:清理定时器
    let appTimer = null;
    document.addEventListener('deviceready', function() {
        appTimer = setInterval(() => {
            // 你的定时逻辑
        }, 1000);
    });
    
    document.addEventListener('pause', function() {
        if (appTimer) {
            clearInterval(appTimer);
            appTimer = null;
        }
        // 示例:取消Axios请求
        if (window.axiosCancelToken) {
            window.axiosCancelToken.cancel('WebView即将销毁,取消请求');
        }
    });
    
  • 原生插件层面:如果有自定义插件,调用WebView方法前先检查状态:
    if (!webView.isDestroyed()) {
        // 安全执行WebView相关操作
        webView.evaluateJavascript("javascript:yourFunction()", null);
    }
    
验证修改

完成配置调整后,重新构建项目:

cordova clean android
cordova build android

安装到测试设备后,调整系统字体大小,就能看到应用不再跳转到首页,错误日志也会消失啦。

内容的提问来源于stack exchange,提问作者Elangovan Eaaswaramurty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:04:40