鸿蒙HarmonyOS:Web组件白屏检测
之前介绍了HarmonyOS的Web组件的简单使用和离线包方案,本篇文章主要说的是Web组件的白屏检测的方案
APP白屏问题简介Web白屏问题通常是在客户端上经常遇到的一种常见问题,尤其是对于Android来说,多个版本的碎片化导致用户有多种不同版本的chrome内核,那么对于HarmonyOS来说也是一样的,一般来说Web白屏有以下几种原因
Web组件配置问题,对于APP来说,这种可能性很小,主要是开发阶段遇到,比如没有开启网络权限、JavaScript未启用、缓存问题等
网络问题,如果设备网络条件不好,尝试加载网络内容时可能导致白屏,这个可以考虑离线包方案解决可以参考之前那篇文章
SSL证书问题 如果WebView加载的内容涉及到HTTPS,SSL证书验证失败可能导致页面无法加载。
HTML、JavaScript语法兼容问题,由于前端这几年发展迅速,导致语法变更快,很多框架比如vue、react等在构建的时候,ES语法不兼容在客户端上经常见到,这种大多都是兼容性问题,比如只在某些低版本机型可见,此类问题比较难以感知,只有用户反馈过来才能去响应
总体来说Web白屏问题是没发根治 ...
鸿蒙HarmonyOS:Web组件初体验与离线包方案探索
1. 引言在当今数字化的世界中,操作系统的演进不仅仅是技术的进步,更是对用户体验和开发者挑战的不断重新定义。而在这场技术的激流中,最近一年来,鸿蒙HarmonyOS崭露头角,尤其是最近这几个月来,各大主流APP都已经陆续启动鸿蒙化的研发,让鸿蒙HarmonyOS成为备受关注的新一代操作系统,本文将聚焦于HarmonyOS中一个重要的组成部分——Web组件,以及与之息息相关的离线包。Web组件作为移动应用开发中不可或缺的一环,为开发者提供了在应用中嵌入Web内容的强大能力
本文基于 HarmonyOS NEXT(4.1)版本API,实现一个简单的Web容器页和离线包方案源码地址 https://github.com/lovexiaobei/WebContainer
2. Web组件初探初始化示例代码
1Web({ src: 'www.example.com', controller: new web_webview.WebviewController();})
HarmonyOS的Web组件构建参数是由src和controller构成的
1234d ...
JVM垃圾回收
第一章《JVM内存结构》第二章《JVM垃圾回收》本文是JVM学习的第二章
概述程序计数器、虚拟机栈、本地方法栈随着线程创建而生,也随着线程一起销毁。栈帧随着方法的开始而入栈,执行完方法而出栈。所以这几个区域的内存分配和回收都有着确定性,不需要过多考虑回收的问题,因为随着线程结束或方法执行完成时,内存就自动的随着一起回收了
而对于Java堆和方法区来说,我们只有在程序的运行期间才知道会创建哪些对象,这部分的内存分配和回收都是动态的。垃圾回收所关注的正是这部分内存。
堆空间的基本结构:
内存分配新生代和老年代
老年代比新生代生命周期长
新生代和老年代默认比例为 1:2 ,JVM调参数 为XX:NewRatio = 1
新生代 分为 1个Eden Space和2个Survivor 比例是 8 : 1 : 1
几乎Java 对象都是在 Eden 区被 new 出来的,Eden 放不了的大对象,就直接进入老年代了。
对象分配过程
Eden区 : new 的对象先放在Eden区,大小有限制,超过大小,就直接进入老年代了,如果创建新对象时,Eden空间满了,就会触发 Minor GC 将Eden ...
I/O
I/O什么是I/OI/O 就是Input 和 Output 的缩写,常见的有文件IO,网络IO,设备IO 等。在linux中所有的组成元素都是一个文件,在文件对于内存来说就是一种流的表现形式。对文件的操作就是对数据流的读写操作,这些读取文件中数据 叫Input流,主要操作 read 函数,往文件中写叫Output流,主要操作 write函数。
主要概念1 阻塞和非阻塞阻塞是指数据请求方在请求数据时,被请求方准备完数据的时候系统调用会一直处于等待状态,非阻塞是指如果被请求方未准备好数据。请求方调用会立即返回,等待完成的信号时再去读取数据。
2 同步与异步同步是指数据请求方从发起请求到完成整个数据完成时,该请求不会返回,一旦调用返回,请求就结束了,异步是指数据请求方发起指令后就返回,等到被请求方将数据处理好后,再通知到数据的请求方,整个数据 的等待和处理都是被请求一方处理的。
3 I/O 模型
同步阻塞 数据请求方调用请求时 一直等待着返回,直到数据通过原请求返回结束
同步非阻塞 数据请求方调用请求时 ,先做其他请求,每过一段时间会观察是否有返回
异步堵塞 数据请求方调用请求时 一 ...
JVM内存结构
Java虚拟机的内存空间分为5个部分
程序计数器
Java虚拟机栈
本地方法栈
堆
方法区
从JDK 1.8起,元数据区取代了永久代,元数据区本质和永久代类似,都是对JVM规范中方法区的实现,不过元空间和永久代最大的差别是元数据空间不在虚拟机内,而是直接使用本地内存
程序计数器(PC 寄存器)定义程序计数器是一块较小的内存空间,是当前线程正在执行的那条指令的地址
Java代码编译的字节码后未经过JIT编译前,是通过字节码解释器进行翻译执行的,首先为解释器装取载入内存的字节码,然后按照顺序读取字节码指令,读取一个指令后,将该指令“翻译”成固定的操作,并根据这些操作进行分支、循环、跳转等流程,如果是单线程的话,程序会按照指令的顺序执行下去,那么程序计数器是多余的,但是实际上程序是由多个线程协作完成的。
JVM 多线程实际是通过CPU时间片轮转算法(线程轮流切换分配处理器时间)实现的,也就是说线程在执行过程中会耗尽时间片而被挂起,然后另外一个线程会获取到时间片执行,当挂起的线程重新获取到时间片的时候,它想要从被挂起的地方继续执行,那么就必须知道它上次执行的位置,在JVM中,就是通过程序 ...