安卓端App页面狂刷问题记录

一、场景

App基于webview混合开发,业务主要为前端h5实现,其中有一个功能为消息中心,当从通知栏点击消息跳转到指定页面时,前端会不停地刷新页面,一遍又一遍地重复同一批请求。

二、问题分析

1、刚开始怀疑是否前端里面调用了reload 或者 框架提供的刷新接口,在反复刷新页面,通过沟通排查确认没有。并且自己将框架里面所有的刷新接口都注释掉,情况依然出现,所以此原因排除。

2、当正常打开App从对应菜单进入到改跳转页面时,都是正常的,不会出现反复刷新请求,只有从消息跳转进入才会,因为怀疑是否为使用Intent 跳转Activity 问题,然后经过排查调试代码,发现这个点也非问题原因。

3、苹果端无此问题,聚焦安卓端webview回调分析

定位到 shouldOverrideUrlLoading 方法, 发现自己的代码为如下写法:

public boolean shouldOverrideUrlLoading(final WebView view, final String url)

{

view.loadUrl(url);

return true;

}

 

 

在网上查阅一番:

webview中shouldOverrideUrlLoading方法解析-CSDN博客

发现这个写法是错误的,

/**
 * Give the host application a chance to take control when a URL is about to be loaded in the
 * current WebView. 
 * 给宿主应用一个机会去控制在当前webview即将加载的一个url。
 * 
 * If a WebViewClient is not provided, by default WebView will ask Activity
 * Manager to choose the proper handler for the URL. 
 * 如果没有提供(自定义创建)WebViewClient,通过默认的webview会要求Activity Manager去处理当前URL。(补充:通常是系统浏览器)
 * 
 * If a WebViewClient is provided,returning
 * 如果提供了(自定义创建设计)WebViewClient
 * 
 * {@code true} causes the current WebView to abort loading the URL, while returning
 * 返回true会导致当前webview中止加载url,
 * 
 * {@code false} causes the WebView to continue loading the URL as usual.
 * 返回false会导致webview正常继续加载url。
 * 
 * Do not call {@link WebView#loadUrl(String)} with the request's
 * URL and then return {@code true}.
 * 不要调用loadUrl方法并且返回true。
 * 
 * The correct way to continue loading a given URL is to simply
 * return {@code false}, without calling {@link WebView#loadUrl(String)}.
 * 继续加载url的正确的做法就是简单的返回false即可,不需要调用loadUrl方法。
 */
 

根据接口说明,只有当拦截某些需要特殊处理的请求时,需要增加判断然后返回true, 否则直接返回false, 会调用父类中的类处理。 而此处直接使用view.loadUrl 方式加载了一次,可能就是导致无线循环刷新页面的原因,当将此处代码调整后,果然这个问题解决了。

后续再回想当时为何这么写,已然不是太记得了,可能是当时为了防止请求直接调用手机中的浏览器?

另外此问题只在特定项目的App前端里面才出现,原因就是只有那个项目的前端在点击消息跳转时才会触发这个回调方法,其他地方都不会触发这个,包括此项目的正常进入此菜单页面,也不会触发,所以对于这个触发条件现在也不太清楚,需要后续有时间再和前端一起确认,项目催得急着解决问题,先就这样吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/152136.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习必修课 - 编码分类变量 encoding categorical variables

1. 数据预处理和数据集分割 import pandas as pd from sklearn.model_selection import train_test_split导入所需的Python库 !git clone https://github.com/JeffereyWu/Housing-prices-data.git下载数据集 # Read the data X pd.read_csv(/content/Housing-prices-data/t…

Mysql 8手动终止某个事务并释放其持有的锁

示范数据表 age具有index普通索引 在mysql数据库里的information_schema.INNODB_TRX表中存储有innodb的所有事务,我们可以查看该表来查看正在进行的事务 现在我开启一个事务,执行第1、2行SQL,启动事务并持有id3的行锁 刷新事务表可以看到…

light client轻节点简介

1. 引言 前序博客: Helios——a16z crypto构建的去中心化以太坊轻节点 去中心化和自我主权对于Web3的未来至关重要,但是这些理想并不总适用于每个项目或应用程序。在非托管钱包和bridges等工具中严格优先考虑安全性而不是便利性的用户,可选…

C++ 01.学习C++的意义-狄泰软件学院

一些历史 UNIX操作系统诞生之初是用汇编语言编写的随着UNIX系统的发展,汇编语言的开发效率成为瓶颈,所以需要一个新的语言替代汇编语言1971年通过对B语言改良,使其能直接产生机器代码,C语言诞生UNIX使用C语言重写,同时…

基于Stable Diffusion的图像合成数据集

当前从文本输入生成合成图像的模型不仅能够生成非常逼真的照片,而且还能够处理大量不同的对象。 在论文“评估使用稳定扩散生成的合成图像数据集”中,我们使用“稳定扩散”模型来研究哪些对象和类型表现得如此逼真,以便后续图像分类正确地分配…

[尚硅谷React笔记]——第3章 React应用(基于React脚手架)

目录: react脚手架创建项目并启动react脚手架项目结构一个简单的Hello组件样式的模块化功能界面的组件化编码流程(通用)组件的组合使用-TodoList 1.react脚手架 xxx脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目 包含了所有需…

/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21‘ not found (required by

在某项目中遇到下面的错误, ./model2trt_v2: /lib64/libstdc.so.6: version GLIBCXX_3.4.21 not found (required by ./model2trt_v2) ./model2trt_v2: /lib64/libstdc.so.6: version GLIBCXX_3.4.21 not found (required by ../../../lib/linux_lib/libcuda_utils…

WPF中DataContext的绑定技巧

先看效果: 上面的绑定值都是我们自定义的属性,有了以上的提示,那么我们可以轻松绑定字段,再也不用担心错误了。附带源码。 目录 1.建立mvvm项目 2.cs后台使用DataContext绑定 3.xaml前台使用DataContext绑定 4.xaml前台使用Da…

浏览器自动化神器:Automa 轻松实现任务编排 | 开源日报 No.52

usememos/memos Stars: 13.8k License: MIT memos,一个轻量级的、自托管的备忘录中心。开源且永久免费。 开源且永久免费使用 Docker 可以在几秒钟内完成自我托管支持 Markdown 格式可定制和共享提供 RESTful API 用于自助服务 mamoe/mirai Stars: 12.6k Licen…

华为云云耀云服务器L实例评测 | 实例使用教学之高级使用:配置 Git SSH Key 进行自动识别拉代码

华为云云耀云服务器L实例评测 | 实例使用教学之高级使用:配置 Git SSH Key 进行自动识别拉代码 介绍华为云云耀云服务器 华为云云耀云服务器 (目前已经全新升级为 华为云云耀云服务器L实例) 华为云云耀云服务器是什么华为云云耀云…

Mac解压缩软件BetterZip免费版注册码下载

软件介绍 BetterZip免费版是一款适用于Mac系统的解压缩软件,软件具备了专业、实用、简单等特点,它可以让用户更快捷的向压缩文件中添加和删除文件,同时兼容性也十分优秀,支持ZIP , SIT , TAR、BZIP2 &…

30分钟快速搭建并部署一个免费的个人博客

1前言 现如今网上有许多完善的博客平台,如博客园、掘金、思否、知乎等。有人会说为什么现在网上有这么多成熟的博客平台,你还要浪费时间搭建一个自己的博客系统呢?首先我相信每一个程序员都会想要拥有一个属于自己的博客系统,其次…

微信小程序 table表格 固定表头和首列 右侧表格可以左右滚动

(一) 1.左侧一列固定不动 2.右侧表格内容可以左右滚动 3.单元格内容平均分配 4.每一行行高可以由内容撑开 通过 js 设置左侧一列行高与右侧表格内容行高保持一致 1.1 效果图 1.2 tabble.wxml <view classtable><!-- 左侧固定 --><view classtable_left_colum…

C++对象模型(2)-- 进程内存空间布局

在前面Base类的对象模型中&#xff0c;有base对象实例&#xff0c;虚函数表&#xff0c;静态变量和函数等&#xff0c;这些信息在内存中都有各自的保存位置。了解进程的内存空间布局&#xff0c;比如内存空间分成几大块&#xff0c;各种不同的数据分别保存在内存空间的哪个位置…

MyBatisPlus(十一)包含查询:in

说明 包含查询&#xff0c;对应SQL语句中的 in 语句&#xff0c;查询参数包含在入参列表之内的数据。 in Testvoid inNonEmptyList() {// 非空列表&#xff0c;作为参数List<Integer> ages Stream.of(18, 20, 22).collect(Collectors.toList());in(ages);}Testvoid in…

JavaEE初阶学习:HTTP协议和Tomcat

1. HTTP协议 HTTP协议是一个非常广泛的应用层协议~~ 应用层协议 —> TCP IP 协议栈 应用层 —> 关注数据怎么使用~ 传输层 —> 关注的是整个传输的起点和终点 网络层 —> 地址管理 路由选择 数据链路层 —> 相邻节点之间的数据转发 物理层 —> 基础设置,硬…

Jmeter常用参数化技巧总结!

说起接口测试&#xff0c;相信大家在工作中用的最多的还是Jmeter。 JMeter是一个100&#xff05;的纯Java桌面应用&#xff0c;由Apache组织的开放源代码项目&#xff0c;它是功能和性能测试的工具。具有高可扩展性、支持Web(HTTP/HTTPS)、SOAP、FTP、JAVA 等多种协议。 在做…

(六)正点原子STM32MP135移植——内核移植

目录 一、概述 二、编译官方代码 三、移植 四、编译 一、概述 前面已经移植好了TF-A、optee、u-boot&#xff0c;在u-boot能正常跑起来的情况下&#xff0c;现在来移植内核。 二、编译官方代码 进入kernel目录 2.1 解压源码、打补丁 /* 解压源码 */ tar xf linux-6.1.28.…

【网络安全 ---- 靶场搭建】凡诺企业网站管理系统靶场详细搭建过程(asp网站,练习sql注入)

一&#xff0c;资源下载 百度网盘资源下载链接&#xff1a;百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固&#xff0c;支持教育网加速&#xff0c;支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com…

jira+confluence安装

准备如下所有包&#xff1a; atlassian-agent.jar jdk-8u241-linux-x64.tar.gz atlassian-confluence-8.0.0-x64.bin atlassian-jira-software-9.4.0-x64.bin mysql-8.0.31-1.el8.x86_64.rpm-bundle.tar mysql-connector-java-8.0.28.jar confluence-8.2.1破解 1.安装j…