【Android Studio】Webview 内核升级得三种方法(续)

news2024/11/17 23:40:32

【Android Studio】Webview 内核升级得三种方法(续)

  • 前言
  • 对原理学习中对应的重点进行一个记录
  • 针对网页加载流量进行一个监控

前言

在之前的博文【Android Studio】Webview 内核升级得三种方法中,介绍了内核升级的三种方法,并提出了对应的demo,针对当时推荐的方案,即webview升级加载的内核(完美解决) 当时主要是使用了大神提供的库,没关注具体的实现原理。本期主要是对原理学习中对应的重点进行一个记录,其次针对网页加载流量进行一个监控

对原理学习中对应的重点进行一个记录

首先,当时了解到这个库是来源与库开发者的博文Android免安装升级系统WebView内核探索 ,然后从GitHub上JonaNorman/WebViewUpgrade下载了源码,根据里面的实例进行使用,结果很成功。

其次,根据博文中的原理介绍,进行了原理学习。由于下载的Android Studio 是Android Studio Koala | 2024.1.1 Patch 1,直接打开源码版本有点问题,因此进行了相关类的移植,主要的变动就在于build.gradle.kts中第三方库文件的导入,如导入下载文件的框架Aria ,应该用implementation("me.laoyuyu.aria:core:3.8.16")。关于这个库最大的特点就在于可以支持断点续传,具体使用可以直接看官方文档,网上相关资料还挺多的。

最后,就是库的实现原理,就像开发者博文中说的,就是把WebViewUpdateService和PacakgeManagerService Hook 一下就行,但实操时,很建议先了解一下Hook 机制使用,主要学习的博文有Hook机制之Binder-Hook 和 Android插件化原理解析——Hook机制之动态代理,感觉这些博文讲得很清楚了,然后就是用好Ctrl +B 快捷键,查找接口的实现类,以及多打印日志,当然也可以调试模式一步步走。

在这里插入图片描述

针对网页加载流量进行一个监控

看完了原理,发现原来第一次完成后,会将地址存共享内存,下次如果能找到,就直接默认成功了,所以这个也就解释了为什么第二次进入内核更新,直接就进度条拉满了。最初网页打开慢,虽然发现是已经成功的load 了网址,但依旧需要很久才加载出来,因为不了解底层实现,当时怀疑是内核升级的问题,导致改变了webview,但看了库的底层,发现其实基本使用还是跟之前的一样:第一次进入内核升级一下,然后下次再进入就直接跳出内核升级了,进入了WebViewUpdateService和PacakgeManagerService重写的方法。后来还是一个前端大佬给出了方向,浏览器加载默认是无节能模式的,而手机内嵌带宽很窄,导致加载慢。如果加载网页切到低俗4G 或者3G 其实依旧很慢。

在这里插入图片描述

为了验证这个方向,进行了APP流量的检测,用得是TrafficStats类里面的方法,它提供了一些获取设备从本次开机到目前为止传输/接收的流量的接口,如下:
在这里插入图片描述
当然也可以参考官方文档,介绍都很详细的。针对流量检测的使用,封装了一下类,用于计算单位时间内,该应用的传输、接收字节总数:

private TextView tvSpeed;
private long lastTotalRxBytes=0;
private long lastTotalTxBytes=0;
private long lastTimeStamp =System.currentTimeMillis();

private void getNetSpeed() {
        String netSpeed = "0 kb/s";
        long nowTotalRxBytes = TrafficStats.getUidRxBytes(getApplicationInfo().uid)==TrafficStats.UNSUPPORTED
                ? 0 :(TrafficStats.getUidRxBytes(getApplicationInfo().uid)/1024);//转为KB;
        long nowTotalTxBytes = TrafficStats.getUidTxBytes(getApplicationInfo().uid)==TrafficStats.UNSUPPORTED
                ? 0 :(TrafficStats.getUidTxBytes(getApplicationInfo().uid)/1024);//转为KB;
        long nowTimeStamp = System.currentTimeMillis();
        long speedRx = ((nowTotalRxBytes - lastTotalRxBytes) * 1000 / (nowTimeStamp - lastTimeStamp));//毫秒转换
        long speedTx = ((nowTotalTxBytes - lastTotalTxBytes) * 1000 / (nowTimeStamp - lastTimeStamp));//毫秒转换

        lastTotalRxBytes = nowTotalRxBytes;
        lastTotalTxBytes = nowTotalTxBytes;
        lastTimeStamp =nowTimeStamp;
        netSpeed  = "传输速度:"+speedTx + " kb/s ----" +
                "接收速度:"+speedRx + " kb/s " ;
        tvSpeed.setText(netSpeed);
    }

然后加个定时器循环调用就行

private Timer timer;

private void calSpeed() {
        timer =new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                getNetSpeed();
            }
        },0,2000);
    }

最后发现确实是那么一回事,就只有10几KB ,那确实是加载慢呀!

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

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

相关文章

ECCV2024|港中文提出文本生成3D方法DreamDissector,能够生成具有交互的多个独立对象。

DreamDissector 是一种文本生成3D对象的方法,通过将多对象文本生成的NeRF输入并生成独立的纹理网格,提供了对象级别的控制和多种应用可能性。 DreamDissector 可以生成具有合理交互的多个独立纹理网格,方便各种应用,包括对象级别的…

NFTScan | 08.19~08.25 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期:2024.08.19~ 2024.08.25 NFT Hot News 01/ CryptoPunk 5822 今日以未公开价格售出,曾在 2022 年以 8000 ETH 售出 8 月 19 日,据 nft now,CryptoPun…

企业终端电脑监控管理系统有哪些?推荐四款全功能级的电脑监控管理系统

企业终端电脑监控管理系统是现代企业管理中不可或缺的一部分,它们主要用于提升信息安全、防止数据泄露、提高工作效率,并确保企业合规性。以下是一些常见的企业终端电脑监控管理系统: 1. 安企神 7天试用免费版https://work.weixin.qq.com/ca…

学习笔记——IP组播——IP组播基本概述

二、IP组播基本概述 IP组播技术有效地解决了单播和广播在点到多点应用中的问题。组播源只发送一份数据,数据在网络节点间被复制、分发(PIM),且只发送给需要该信息的接收者。 1、前言 网络中存在各种各样的业务,从流…

★ OJ题 ★ 二叉树

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将和大家一起做一些二叉树的OJ题~ 目录 一 单值二叉树 二 相同的树 三 对称二叉树 四 二叉树的前序遍历 五 另一颗树的子树 六 二叉树遍历 一 单值二叉树 965. 单值二叉树 - 力扣&#xff08;LeetCode…

Android平台原生音视频编解码MediaCodec

MediaCodec介绍 MediaCodec是Android平台上的一个多媒体编解码器&#xff0c;它可以用于对音频和视频进行编解码。通过MediaCodec&#xff0c;开发者可以直接访问底层的编解码器&#xff0c;实现更高效的音视频处理。同时&#xff0c;MediaCodec也支持硬件加速&#xff0c;可以…

java中的Opencv:Opencv简介与开发环境部署

文章目录 1.Opencv简介Opencv的应用 2.Java使用OpenCV进行图像操作opencv安装java项目中集成Opencv 3.Opencv常用的API 1.Opencv简介 OpenCV &#xff08; Open Source Computer Vision Library &#xff09;是一个广泛应用于计算机视觉和图像处理领域的开源库。它提供了丰富的…

Android12上调试nxp的wifi模块支持5G频段的ap和sta同时共存

我们使用的是nxp的88W8987模块 在使用过程中发现,不能分享出5g的热点,通过log发现国家码没有正常设置,驱动那边加载相关数据库失败 通过与供应商和度娘等排查,需要下载regulatory.db,进行insmod加载才可以,rk默认没有处理,因为rk默认适配的博通的模块,自带了国家码相关…

SAP DYNP_VALUES_UPDATE/READ 更新/获取屏幕字段函数用法

【函数】Function DYNP_VALUES_READ, DYNP_VALUES_UPDATE 【作用】实时获取和更新屏幕上的最新值。 【场景】GUI选择屏幕&#xff0c;选择公司代码&#xff0c;过滤所属公司下的项目&#xff1b;选择项目过滤所属的分期。 REPORT zdynp_values_read MESSAGE-ID 00 NO STANDAR…

grbl下载、编译与修改

一、下载 官方基本grbl https://github.com/grbl/grbl官方优化后的grbl https://github.com/gnea/grbl官方适配mega2560的grbl https://github.com/gnea/grbl-Mega/ 二、编译 arduino最新 为了防止出现问题&#xff0c;将arduino更新到最新是必要的。压缩和加载库 压缩&…

文件上传不断流,下载不限速的企业网盘推荐——可道云teamOS

在信息爆炸的时代&#xff0c;企业文件的传输与管理成为了日常工作中不可或缺的一环。面对海量数据的传输需求&#xff0c;如何确保文件上传的流畅性、下载的高效性&#xff0c;同时又能兼顾文件管理的便捷性&#xff0c;成为了许多企业面临的难题。 今天&#xff0c;我要向大…

20240823 system()读取io口状态 popen()接收io操作的返回信息

读取工控机io system 与 popen io操作APIc system&#xff08;&#xff09;popenopen os.system()、os.popen()和subprocess的区别&#xff08;一&#xff09; 函数system 直接读文件最快&#xff01;[Linux] Ubuntu实机下控制GPIO io操作API 工控机的io口操作的函数 需要…

【机器学习】CNN在计算机视觉中的应用

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 CNN在计算机视觉中的应用1. 引言2. 图像分类3. 目标检测3.1 基于区域的目标检测…

总结拓展八:SAP常见的系统间接口方式

&#xff08;01&#xff09;-远程函数调用 所谓系统接口&#xff0c;实际上就是不同系统间的数据交换方式。 对于一个企业来说&#xff0c;肯定不是一个系统就能够支持所有业务的运转&#xff0c;几乎所有企业都会使用多个系统&#xff0c;比如较为常见的ERP/MES等。 当企业有多…

【STM32单片机_(HAL库)】3-4-4【中断EXTI】【智能排队控制系统】项目实现

3-4-2系统框图及硬件接线 3-4-3系统代码框架搭建 4.软件—tasks.c文件编写 排队控制系统状态机 tasks.c #include "tasks.h" #include "led.h" #include "beep.h" #include "exti.h" #include "lcd1602.h" #include &…

直流负载的必要性

直流负载在电力系统中扮演着至关重要的角色&#xff0c;它的必要性主要体现在以下几个方面&#xff1a; 1. 能源转换效率&#xff1a;在现代电力系统中&#xff0c;电能的生成、传输和使用过程中&#xff0c;需要经过多次能量形式的转换。在这个过程中&#xff0c;直流负载可以…

虚幻引擎UE5入坑记

前言 Unreal Engine 和Unity Engine作为目前主流的游戏引擎&#xff0c;各有优缺点。而我目前的工作还是以Unity开发为主&#xff0c;在使用Unity的过程中&#xff0c;总避免不了听到或看到过UE相关的东西&#xff0c;从开始的好奇到后面想要去学习它&#xff0c;但是&#xf…

数据结构之AVL树的 “奥秘“

二叉树查询性能分析&#xff1a; 插入和删除操作都必须先查找&#xff0c;查找效率代表了二叉搜索树中各个操作的性能 对有n个结点的二叉搜索树&#xff0c;若每个元素查找的概率相等&#xff0c;则二叉搜索在二叉搜索树树平均查找长度是结点的深度的函数&#xff0c;即结点越深…

继电器的工作原理及作用

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言1.基本概念3.主要作用4.基本结构5.工作原理 前言 送给大学毕业后找不到奋斗方向的你&#xff08;每周不定时更新&…

联合贷款系统架构与流程解析

在联合贷款作为一种创新的融资模式&#xff0c;正逐渐受到越来越多金融机构和借款人的青睐。本文将分析联合贷款产品的优势&#xff0c;详细描述其流程&#xff0c;并结合实际案例展示联合贷款在实际应用中的场景。帮助读者增进对于联合贷款系统架构及其运作机制的了解。 一、…