当前位置: 首页 > news >正文

react-native:解决使用webView后部分场景在安卓10崩溃闪退问题

app闪退问题原因:

安卓7以上版本(7和7以下版本不会出现闪退):在屏幕不可视区域加载webView或者webView不在可视区域内切换页面时app崩溃闪退(在屏幕可视区域加载webView或者webView在可视区域内切换页面不会闪退)

解决办法 

  • 进入页面时
    给webView设置状态为false并且延时加载,设置lodding,等其他视图渲染完毕后wevView状态设置为true,然后加载webView。
import {useNavigation} from '@react-navigation/native';const navigation = useNavigation();
const [showChart, setShowChart] = useState(false)
useEffect(() => {dispatch(changeLoading({isShow: true, message: "加载中"}))setTimeout(() => {setShowChart(true);dispatch(changeLoading({isShow:false,message:"加载中"}));}, 1000);
},[])<View>{showChart?<wevViewh5height={scale(150)}h5width={scale(300)}cannotTouch={true}/>:null}
</View>
  • 切换页面时
    设置自定义返回事件,同样延时切换页面,在切换时先销毁webView然后在进行页面切换(这里举例返回上一页)

 

// BackHandler API 用于监听设备上的后退按钮事件,可以调用你自己的函数来处理后退行为。此 API 仅能在 Android 上使用。
// 官网地址:https://reactnative.cn/docs/backhandler
import { TouchableOpacity,BackHandler } from 'react-native'
import {useNavigation} from '@react-navigation/native';const navigation = useNavigation();// 自定义返回按钮
navigation.setOptions({headerBackImage: () => (<TouchableOpacity// pop返回时执行操作onPress={pop}style={{height: scale(34),width: scale(80),paddingLeft: scale(12),justifyContent: 'center',// backgroundColor:'red',}}><Image// 可点击区域设置大一点style={{width: scale(12), height: scale(20)}}source={require('../image/back.png')}/></TouchableOpacity>),
});const pop = () => {// 设置webView状态为false,延时退出setShowChart(false);setTimeout(() => {navigation.pop();}, 200);return true;
}useEffect(() => {if (Platform.OS == 'android') {//添加返回监听事件BackHandler.addEventListener('hardwareBackPress', pop);}return () => {if (Platform.OS == 'android') {// 删除监听事件BackHandler.removeEventListener('hardwareBackPress', pop);}};
},[])

 分割线————————————————————————————

 定位问题与解决问题的过程

 定位问题的过程比较痛苦
开发使用安卓版本:android10
因为项目中已经有很多功能使用webView并没有什么问题,所以当出现闪退的时候并没有第一时间考虑到时webView的问题(踩坑无数)

解决问题的过程更加痛苦
第一次怀疑是webView的问题的时候是测试在使用android7的模拟器并不会出现闪退现象(初步怀疑可能与安卓10的垃圾回收有关,并没有仔细排查)
后来发现其他功能用到的webView都是在页面可视区域加载且页面不可滑动,后来把闪退页面的webView放到屏幕可视区域并延时渲染在进入页面时不会出现闪退问题(以为解决了)
再后来发现在页面滑动后,webView不在可视区域内进行返回上一页操作时,又出现闪退,然后添加返回监听,延时退出(此时彻底解决问题)(踩坑无数)
                        
原文链接:https://blog.csdn.net/weixin_43413824/article/details/120301018

 

 

 

 

相关文章:

react-native:解决使用webView后部分场景在安卓10崩溃闪退问题

app闪退问题原因&#xff1a; 安卓7以上版本&#xff08;7和7以下版本不会出现闪退&#xff09;&#xff1a;在屏幕不可视区域加载webView或者webView不在可视区域内切换页面时app崩溃闪退&#xff08;在屏幕可视区域加载webView或者webView在可视区域内切换页面不会闪退&…...

大数据工具 flume 的安装配置与使用 (详细版)

参考网址&#xff1a;Flume 1.9用户手册中文版 — 可能是目前翻译最完整的版本了 1&#xff0c;上传安装包 安装包链接&#xff1a;文件下载-奶牛快传 Download &#xff5c;CowTransfer 口令&#xff1a;x8bhcg 1&#xff0c;切换盘符到安装目录 cd /opt/moudles 解压文件…...

智慧城市智慧城市项目方案-大数据平台建设技术方案(原件Word)

第1章 总体说明 1.1 建设背景 1.2 建设目标 1.3 项目建设主要内容 1.4 设计原则 第2章 对项目的理解 2.1 现状分析 2.2 业务需求分析 2.3 功能需求分析 第3章 大数据平台建设方案 3.1 大数据平台总体设计 3.2 大数据平台功能设计 3.3 平台应用 第4章 政策标准保障…...

C语言比较两个字符串是否相同

在不使用string.h中的内置函数的情况下 #include <stdio.h> #include <string.h> void main(){char arr1[]"hello world";char arr2[]"hello world";int i,a0;if(strlen(arr1)!strlen(arr2)){print("不相等");return 0;}for(i0;arr…...

丹摩征文活动|FLUX.1图像生成模型:AI工程师的创新实践

文章目录 一、对"FLUX.1"系列模型版本分析 二、AI工程师与FLUX.1系列模型 三、ComfyUI在线部署四、FLUX.1在线部署五、添加工作流呈现效果图展示六、总结 黑森林实验室&#xff08;Black Forest Labs&#xff09;推出的FLUX.1图像生成模型&#xff0c;凭借120亿参数的…...

ZABBIX API获取监控服务器OS层信息

Zabbix 是一款强大的开源监控解决方案,能够通过其 API 接口自动化管理和获取监控数据。在这篇文章中,详细讲解如何通过 Zabbix API 批量获取服务器的系统名称、IP 地址及操作系统版本信息,并将数据保存到 CSV 文件中。本文适合对 Python 编程和 Zabbix 监控系统有一定基础的…...

SpringBoot基础系列学习(五):JdbcTemplate 访问数据库

文章目录 一丶介绍二丶引入依赖三丶配置配置文件四丶创建表五丶java代码 一丶介绍 Spring Boot作为Spring的集大成者&#xff0c;自然会将JdbcTemplate集成进去。Spring Boot针对JDBC的使用提供了对应的Starter包&#xff1a;spring-boot-starter-jdbc&#xff0c;它其实就是在…...

JavaEE-多线程初阶(3)

目录 1.线程的状态 1.1 NEW、RUNNABLE、TERMINATED 1.2 TIMED_WAITING 1.3 WAITING 1.4 BLOCKED 2.多线程带来的风险-线程安全&#xff08;重点&#xff09; 2.1 观察线程不安全的现象 2.2 分析产生该现象的原因 2.3 产生线程安全问题的原因 2.3.1 抢占式执行&#x…...

从入门到精通:如何在Vue项目中有效运用el-image-viewer

Element UI之el-image-viewer组件详解 引言 在现代 Web 应用中,高质量的用户体验是不可或缺的一环。Element UI 作为一款基于Vue.js 2.0 的桌面端组件库,以其丰富的组件集、良好的文档和支持赢得了广大开发者的好评。本文将深入探讨el-image-viewer组件,这是一个用于在网页…...

uniapp组件实现省市区三级联动选择

1.导入插件 先将uni-data-picker组件导入我们的HBuilder项目中&#xff0c;在DCloud插件市场搜索uni-data-picker 点击下载插件并导入到我们的项目中 2.组件调用 curLocation &#xff1a;获取到的当前位置&#xff08;省市区&#xff09; <uni-data-picker v-slot:defa…...

【C++】异常处理机制(对运行时错误的处理)

&#x1f308; 个人主页&#xff1a;谁在夜里看海. &#x1f525; 个人专栏&#xff1a;《C系列》《Linux系列》 ⛰️ 天高地阔&#xff0c;欲往观之。 目录 引言 1.编译器可以处理的错误 2.编译器不能处理的错误 3.传统的错误处理机制 assert终止程序 返回错误码 一、…...

C++ boost steady_timer使用介绍

文章目录 1. 引入必要的头文件2. 基本用法2.1 同步定时器解释:2.2 异步定时器解释:3. 异步定时器与回调函数4. 设置定时器的超时时间4.1 使用秒、毫秒、微秒4.2 修改定时器的到期时间5. 多次使用定时器6. 循环执行任务7. 错误处理总结:C++ Boost 库提供了 boost::asio::stea…...

JVM 由多个模块组成,每个模块负责特定的功能

Java虚拟机&#xff08;JVM, Java Virtual Machine&#xff09;是一个抽象的计算机&#xff0c;它提供了一个运行环境&#xff0c;使得Java字节码可以在不同的平台上执行。JVM 由多个模块组成&#xff0c;每个模块负责特定的功能。以下是 JVM 的主要模块及其功能&#xff1a; …...

ORACLE批量插入更新如何拆分大事务?

拆分大事务 一、批量插入更新二、拆分事务之前文章MYSQL批量插入更新如何拆分大事务?说明了Mysql如何拆分,本篇文章探讨Oracle或OceanBase批量插入更新拆分大事务的问题 一、批量插入更新 oracle批量插入更新可使用merge语法eg: merge test ausing test_tmp bon (a.id = b.id…...

kafka+zookeeper的搭建

kafka从2.8版本开始&#xff0c;就可以不用配置zookeeper了&#xff0c;但是也可以继续配置。我目前使用的kafka版本是kafka_2.12-3.0.0.tgz&#xff0c;其中前面的2.12表示是使用该版本的scala语言进行编写的&#xff0c;而后面的3.00才是kafka当前的版本。 通过百度网盘分享…...

Spark中的宽窄依赖

一、什么是依赖关系 这里通过一张图来解释&#xff1a; result_rdd是由tuple_rdd使用reduceByKey算子得到的&#xff0c; 而tuple_rdd是由word_rdd使用map算子得到的&#xff0c;word_rdd又是由input_rdd使用flatMap算子得到的。它们之间的关系就称为依赖关系&#xff01; 二…...

安装和运行开发微信小程序

下载HBuilder uniapp官网 uni-app官网 微信开发者工具 安装 微信小程序 微信小程序 官网 微信小程序 配置 运行 注意&#xff1a;运行前需要开启服务端口 如果运行看不到效果&#xff0c;设置下基础库选别的版本 配置...

地图框架之mapbox——(五)

今天主要学习mapbox中如何使用画笔&#xff01; 一、导入画笔依赖 <script src"https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-draw/v1.2.2/mapbox-gl-draw.js"></script> <link rel"stylesheet" href"https://api.mapbox…...

Hive 的数据类型

基本类型 整型 TINYINT: 1字节整数&#xff0c;范围从 -128 到 127。SMALLINT: 2字节整数&#xff0c;范围从 -32,768 到 32,767。INT: 4字节整数&#xff0c;范围从 -2,147,483,648 到 2,147,483,647。BIGINT: 8字节整数&#xff0c;范围从 -9,223,372,036,854,775,808 到 9…...

2024下半年软考考后估分,快来预约!

2024下半年软考这周末就要开考了&#xff01;考后大家最关心的&#xff0c;莫过于考试成绩。届时会为家更新回忆版真题及答案&#xff0c;现在就可以开始预约啦~ 因为是回忆版&#xff0c;老师做题也需要时间&#xff0c;答案会慢慢更新&#xff0c;大家耐心等待片刻&#xff…...

Hermes Agent 初始化三要素:人格设定、记忆加载、技能绑定的 7 步配置实录

1. 初始化不是“启动”,而是给智能体装上灵魂、记性与双手 大多数人第一次运行 hermes agent start,看到终端里跳出几行绿色日志,就以为初始化完成了。我也是这么想的——直到上线第三天,用户反馈:“它昨天还记得我偏好 TypeScript,今天又建议我用 JavaScript 写 CLI 工…...

电磁仿真进阶--CST空心电感建模与实测验证全流程

1. 空心电感建模与仿真的工程价值 空心电感作为高频电路中的核心无源器件&#xff0c;其性能直接影响射频前端、滤波电路等关键模块的工作表现。与传统带磁芯的电感不同&#xff0c;空心电感避免了磁饱和问题&#xff0c;但同时也面临着建模复杂度高、高频特性难以准确预测的挑…...

终极指南:三分钟轻松解锁《原神》60帧限制,让你的高刷显示器火力全开![特殊字符]

终极指南&#xff1a;三分钟轻松解锁《原神》60帧限制&#xff0c;让你的高刷显示器火力全开&#xff01;&#x1f3ae; 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 还在为《原神》60…...

Linux内核中断处理机制深度解析:中断嵌套与异常打断原理

1. 中断处理中的“打断”迷思&#xff1a;一个内核老兵的深度剖析在Linux内核开发与调试的深水区里&#xff0c;中断处理机制就像一把双刃剑&#xff0c;它赋予了系统响应外部事件的实时性&#xff0c;却也带来了复杂性与不确定性。其中&#xff0c;一个经典且常被误解的问题就…...

告别WinForm!用C#和MetroFramework快速搭建现代化工控上位机UI(附完整源码)

用C#和MetroFramework打造现代化工控上位机界面的实战指南 在工业自动化领域&#xff0c;上位机软件的用户体验往往被忽视。许多工程师仍然在使用传统的WinForm开发界面&#xff0c;这些界面虽然功能完备&#xff0c;但视觉效果和交互体验已经远远落后于现代软件的标准。本文将…...

内容创作团队借助多模型能力提升文案生成质量与效率

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 内容创作团队借助多模型能力提升文案生成质量与效率 对于新媒体运营、内容营销或品牌文案团队而言&#xff0c;持续产出高质量、风…...

不只是远程桌面:用向日葵在Ubuntu上实现无人值守文件传输与SSH隧道

超越远程桌面&#xff1a;向日葵在Ubuntu上的高阶自动化实践 当大多数人提起向日葵时&#xff0c;第一反应往往是"远程控制软件"。但这款工具的实际能力远不止于此——在开发者手中&#xff0c;它可以成为打通内外网的生产力中枢。想象这样一个场景&#xff1a;你正在…...

终极音乐歌词获取指南:163MusicLyrics让你的每首歌都有完美字幕

终极音乐歌词获取指南&#xff1a;163MusicLyrics让你的每首歌都有完美字幕 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 还在为音乐播放器缺少歌词而烦恼&#xff1f;…...

SpringBoot开发秘籍【个人八股】

介绍一下 SpringBoot&#xff1f; Spring Boot极大地简化了 Spring 应用的开发和部署过程。 以前我们用 Spring 开发项目的时候&#xff0c;需要配置一大堆 XML 文件&#xff0c;包括 Bean 的定义、数据源配置、事务配置等等&#xff0c;非常繁琐。而且还要手动管理各种 jar 包…...

硬件工程师转型软件设计:十大核心技巧与思维转换实战指南

1. 项目概述&#xff1a;一次思维模式的“跨界”升级作为一名在硬件领域摸爬滚打了十多年的老兵&#xff0c;我深知从示波器、烙铁和PCB布线软件转向代码编辑器、版本控制和软件架构图时&#xff0c;那种既兴奋又迷茫的感觉。硬件工程师转软件设计&#xff0c;这绝不仅仅是换个…...