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

news2024/12/23 17:24:12

一、场景

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.coloradmin.cn/o/1072533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mac电脑专业的任务管理软件 Omnifocus Pro 3中文 for mac

OmniFocus Pro是一款针对Mac平台的高效任务管理软件,它可以帮助用户处理日常事务、安排计划任务,同时提高用户的工作效率。该软件具有简单、直观、易于使用的特点,与其他电子任务清单工具相比,OmniFocus Pro更加专注于细节和定制化…

【postgresql】

看到group by 1,2 和 order by 1, 2。看不懂,google,搜到了Stack Overflow 上有回答 What does SQL clause “GROUP BY 1” mean? 大概意思就是,group by, order by 后面跟数字,指的是 selec…

漏刻有时数据可视化大屏(16)数据指标KPI和柱图折线图混排

CSS样式表 /*面板*/ .pannel {width: 100%;margin-top: 30px;clear: both; }.item_l {float: left;width: 20%; /*3格60%*/margin: 0; }.item_r {float: left;width: 10%; /*4格40%*/margin: 0; }.item_child {float: left;width: 50%; }.item_child_b {float: left;width: 10…

OLED透明拼接屏,在包头市的市场表现与应用领域

包头,作为内蒙古自治区的重要城市之一,以其丰富的煤炭资源和快速发展的经济而闻名于世。 包头拥有着独特的地理位置和良好的交通条件,吸引了大量的投资和企业进驻,推动了城市的不断发展和现代化建设。 随着科技的不断进步&#…

深度学习基础知识 使用torchsummary、netron、tensorboardX查看模参数结构

深度学习基础知识 使用torchsummary、netron、tensorboardX查看模参数结构 1、直接打印网络参数结构2、采用torchsummary检测、查看模型参数结构3、采用netron检测、查看模型参数结构3、使用tensorboardX 1、直接打印网络参数结构 import torch.nn as nn from torchsummary im…

Linux入门攻坚——2、基础命令学习

Linux就是命令集的操作系统,精通Linux,就要先精通各种命令。 date : date [OPTION] ... [FORMAT] : 显示日期时间(系统时钟) FORMAT:格式符号 %D:月/日/年…

优思学院|零库存:丰田精益管理的成功之道(CLMP)

在如今竞争激烈的商业世界中,企业需要不断寻求新的方法来提高效率、降低成本,并确保产品的高质量。其中一种成功的策略是实施零库存管理,而日本汽车制造巨头丰田公司就以其独特的零库存策略而闻名全球。优思学院在本文中将会深入探讨什么是零…

Android Studio: unrecognized Attribute name MODULE

错误完整代码: ������ (1.8.0_291) �г����쳣������&#xff…

C++对象模型(3)-- 类对象所占用的空间

类对象所占用的空间可以用sizeof()函数获取,在C对象模型中,类对象所占用的空间规则如下: (1) 空类占1字节,以使该类对象在内存得以配置一个地址。 (2) 对象所占用的空间由3个因素决定:非静态成员变量、虚函数、字节填…

图形学 -- Rasterization栅格化

参考视频:Lecture 05 Rasterization 1 (Triangles)_哔哩哔哩_bilibili 视锥: 定义一个垂直角度,定义宽高比 投到[-1,1]^3之后要呈现到屏幕上 屏幕 屏幕(一个二位数组) 屏幕是个典型的光栅成像设备 定义屏幕空间 映…

【每日一练】勾股定理困难版

目录 题目官方给的解题思路源代码附最大公因数辗转相除法更相减损术 所有因数参考文献 题目 给定斜边z的值&#xff0c;求所有直角边x和y的组合数&#xff08;x、y和z都是正整数&#xff09;。 仅有一行输入&#xff0c;即斜边z的值&#xff08;z是正整数&#xff0c;且z<1…

23种经典设计模式:单例模式篇(C++)

前言&#xff1a; 博主将从此篇单例模式开始逐一分享23种经典设计模式&#xff0c;并结合C为大家展示实际应用。内容将持续更新&#xff0c;希望大家持续关注与支持。 什么是单例模式&#xff1f; 单例模式是设计模式的一种&#xff08;属于创建型模式 (Creational Pa…

将本地代码提交到git新仓库

建仓 首先需要新建一个仓库&#xff0c;注意一定要是空仓库&#xff0c;不要选任何初始化 在代码所在目录右击&#xff0c;进入Git Bash Here 初始化git仓库 git init将文件添加进库 git add .进行提交&#xff0c;-m 后面引号中的内容是本次提交内容&#xff0c;自行填写…

STM32F103 最小系统 PCB 设计与原理

这篇文章是来自我学习&#xff1a; ​​​​​​带着你从手册开始画板 STM最小系统板教程系列(一)_哔哩哔哩_bilibili​​​​​​ 这套教程的笔记&#xff0c;同时本文中也参考了其他教程以及我遇到的困惑与自答&#xff0c;最终汇总。 一、单片机最小系统 单片机最小系统是由…

Centos7中安装Jenkins教程

1.必须先配置jdk环境&#xff0c;安装jdk参考 Linux配置jdk 2.先卸载Jenkins # rpm卸载 rpm -e jenkins # 检查是否卸载成功 rpm -ql jenkins # 彻底删除残留文件 find / -iname jenkins | xargs -n 1000 rm -rf 3.安装Jenkins 在 /usr/ 目录下创建 jenkins文件夹 mkdir -p je…

Fastadmin 子级菜单展开合并,分类父级归纳

这里踩过一个坑&#xff0c;fastadmin默认的展开合并预定义处理的变量是pid。 所以建表时父级id需要是pid&#xff1b; 当然不是pid也没关系&#xff0c;这里以cat_id为例&#xff0c;多加一步处理一样能实现。 废话少说上代码&#xff1a; 首先在控制器&#xff0c; 引用…

使用HbuilderX运行uniapp中小程序项目

下载HbuilderX&#xff0c;下载链接&#xff1a; HBuilderX-高效极客技巧 导入相关项目。下载微信开发者工具。使用微信开发者工具打开&#xff1a;注意&#xff1a;如果是第一次使用&#xff0c;需要先配置小程序ide的相关路径&#xff0c;才能运行成功。如下图&#xff0c;需…

国产开源无头CMS,MyCms v4.7 快捷生成接口开发后台

MyCms 是一款基于 Laravel 开发的开源免费的开源多语言商城 CMS 企业建站系统。 MyCms 基于 Apache2.0 开源协议发布&#xff0c;免费且可商业使用&#xff0c;欢迎持续关注我们。技术交流 QQ 群&#xff1a;887522124 加群请备注来源&#xff1a;如gitee、github、官网等 v4…

什么是智能档案柜?如何使用智能档案柜?

智能档案柜是一种具有智能化功能的文件存储设备&#xff0c;它通过应用现代科技&#xff0c;集成了电子锁、自动化控制、智能管理系统技术&#xff0c;具有自动识别、高效存储、安全可靠等特点&#xff0c;提高档案管理的效率和安全性。适用于企业单位、图书馆等需要储存文件资…