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

Android 9 WebView运行20小时出现双实例异常问题求助

问题记录

基于Ionic Cordova框架运行Angular 10.2.5版本项目时,在Android 9系统WebView环境下可复现以下异常:

  • 程序持续运行20小时左右,会自动生成重复WebView实例,最终出现双WebView实例同时运行的异常表现
  • 异常现象截图:
    异常现象截图
问题排查与修复

该问题已有大量同技术栈开发者反馈,属于Cordova-Android平台在Android 9系统下的典型兼容性问题,和Angular版本无直接关联,核心触发原因及对应修复方案如下:

  • 原因1:Activity启动模式配置不兼容
    Android 9系统对后台驻留时长超过20小时的应用会触发内存阈值回收,Cordova默认的MainActivity启动模式为standard,系统回收后重新拉起Activity时不会复用原有栈内实例,会新建CordovaWebView实例挂载到新Activity上,原有实例因上下文泄漏未被销毁,最终形成双实例。
    修复方法:修改项目AndroidManifest.xml中MainActivity的启动模式为singleTask,参考配置:
    <activity android:name="MainActivity"
              android:launchMode="singleTask"
              android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode">
              <!-- 保留原有其他配置项 -->
    </activity>
    
  • 原因2:低版本cordova-android核心库存在生命周期bug
    若项目使用的cordova-android平台版本低于9.1.0,核心库存在WebView生命周期解绑逻辑缺失问题:应用长时间驻留触发WebView重载时,未销毁原有WebView实例就直接创建新实例挂载。
    修复方法:升级cordova-android平台到修复版本,执行以下命令:
    cordova platform rm android
    cordova platform add android@9.1.0
    
  • 原因3:第三方插件重复唤起Activity
    部分集成的推送、后台保活类插件在应用长时间驻留后,会触发Application生命周期二次执行,若插件内置主动唤起Cordova Activity的逻辑,会重复创建WebView实例。
    排查方法:在MainActivity的onCreate方法中添加日志打印当前任务栈ID,若出现双实例时两次onCreate打印的栈ID不一致,即可定位为插件触发的重复启动,给对应插件添加重复启动拦截逻辑即可。

内容的提问来源于stack exchange,提问作者Naor Yael

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 21:33:29