- 博客(131)
- 收藏
- 关注
原创 Android热修复原理(一)热修复框架对比和代码修复
刚发布的版本出现了严重的bug,这就需要去解决bug、测试并打渠道包在各个应用市场上重新发布,这会耗费大量的人力物力,代价会比较大。已经改正了此前发布版本的bug,如果下一个版本是一个大版本,那么两个版本的间隔时间会很长,这样要等到下个大版本发布再修复bug,这样此前版本的bug会长期的影响用户。版本升级率不高,并且需要很长时间来完成版本覆盖,此前版本的bug就会一直影响不升级版本的用户。有一个小而重要的功能,需要短时间内完成版本覆盖,比如节日活动。为了解决上面的问题,热修复框架就产生了。
2025-07-16 10:31:39
586
原创 Activity,Window,View,ViewRootImpl理解
一句话总结:Activity提供与AMS通信的Token(IBinder对象),创建Window为View提供显示的地方,而具体的View管理任务由ViewRootImpl来完成。读别人的博客有个很大的好处是可以快速定位到关键点,但具体想要真正的理解还需要自己趣深入研究。
2025-07-11 15:20:38
725
原创 Android解析ClassLoader(二)Android中的ClassLoader
在上一篇文章我们学习了Java的ClassLoader,很多同学会把Java和Android的ClassLoader搞混,甚至会认为Android中的ClassLoader和Java中的ClassLoader是一样的,这显然是不对的。这一篇文章我们就来学习Android中的ClassLoader,来看看它和Java中的ClassLoader有何不同。
2025-07-11 14:25:23
980
原创 Android解析ClassLoader(一)Java中的ClassLoader
系统提供的类加载器只能够加载指定目录下的jar包和Class文件,如果想要加载网络上的或者是D盘某一文件中的jar包和Class文件则需要自定义ClassLoader。定义一个自定义ClassLoade并继承抽象类ClassLoader。复写findClass方法,并在findClass方法中调用defineClass方法。下面我们就自定义一个ClassLoader用来加载位于D:\lib的Class文件。
2025-07-10 11:11:50
630
原创 WindowManagerService(三)Window的删除过程
在本系列文章中,我提到过:Window的操作分为两大部分,一部分是WindowManager处理部分,另一部分是WMS处理部分,Window的删除过程也不例外,本篇文章会介绍Window的删除过程,包括了两大处理部分的内容。
2025-07-08 16:32:09
879
原创 WindowManagerService(二)WMS的重要成员和Window的添加
对所要添加的窗口进行检查,如果窗口不满足一些条件,就不会再执行下面的代码逻辑。WindowToken相关的处理,比如有的窗口类型需要提供WindowToken,没有提供的话就不会执行下面的代码逻辑,有的窗口类型则需要由WMS隐式创建WindowToken。WindowState的创建和相关处理,将WindowToken和WindowState相关联。创建和配置DisplayContent,完成窗口添加到系统前的准备工作。
2025-07-08 16:02:30
962
原创 WindowManagerService(一)WMS的诞生
此前我用多篇文章介绍了WindowManager,这个系列我们来介绍WindowManager的管理者WMS,首先我们先来学习WMS是如何产生的。本文源码基于Android 8.0,与Android 7.1.2相比有一个比较直观的变化就是Java FrameWork采用了Lambda表达式WMS是系统的其他服务,无论对于应用开发还是Framework开发都是重点的知识,它的职责有很多,主要有以下几点:WMS是窗口的管理者,它负责窗口的启动、添加和删除,另外窗口的大小和层级也是由WMS进行管理的。窗口管理的核
2025-07-08 11:37:36
696
原创 WindowManager(三)Window的添加过程
WindowManager对Window进行管理,说到管理那就离不开对Window的添加、更新和删除的操作,在这里我们把它们统称为Window的操作。对于Window的操作,最终都是交由WMS来进行处理。窗口的操作分为两大部分,一部分是WindowManager处理部分,另一部分是WMS处理部分。
2025-07-04 23:38:19
867
原创 WindowManager解析(二)Window的属性
上一篇文章中我们讲过了Window、WindowManager和WMS之间的关系,WMS是Window的最终管理者,Window好比是员工,WMS是老板,为了方便老板管理员工则需要定义一些“协议”,这些“协议”就是Window的属性,被定义在WindowManager的内部类LayoutParams中,了解Window的属性能够更好的理解WMS的内部原理。
2025-07-04 23:06:24
828
原创 windowManager解析
WindowManagerService(WMS)和AMS一样,都是Android开发需要掌握的知识点,同样的,WMS也很复杂,需要多篇文章来进行讲解,为了更好的理解WMS,首先要了解WindowManager,这一篇我们来学习WindowManager体系。
2025-07-04 22:40:41
541
原创 Android studio导入FFmpeg编译动态库文件
在过去,通常使用 makefile 的方式在项目中引入 C/C++ 代码支持,随着 Android Studio 的普及,makefile 的方式已经基本被 CMake 替代。有了 Android 官方的支持,NDK 层代码的开发变得更加容易。以前一谈到 Android NDK ,许多人就会大惊失色,感觉是深不可测的东西,一方面是 makefile 的编写很难,一方面是 C/C++ 相比 Java 来说,比较晦涩。但是不必担心,一是有了 CMake ,二是对于 C/C++ 的基本使用其实和 Java 差
2025-07-02 18:07:26
1038
原创 Android Gradle相关配置解析
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。怎么看上面都是一段很官方的解释,对于入门的人来说简直是一个噩梦般的解释(包括以前的我)。那下面我就用通俗一点语言说说我的理解。Gradle就是工程的管理,帮我们做了依赖,打包,部署,发布,各种渠道的差异管理等工作。
2025-06-04 15:08:19
991
原创 【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解
例如,京东APP的直播模块,就可以设计为feature,用户点击直播入口才去加载,减小初始包大小。并且京东APP在车机和手表等不同设备上,可以适配硬件加载不同的feature模块。不过需要注意的是,使用feature模块,需处理 Feature HAP 的加载时机、依赖关系及错误处理,避免因模块未下载导致功能不可用。(如首次使用时的网络请求和安装时间)。feature HAP 是实现轻量化、动态化、跨设备应用的核心机制。一般是面试题目,要好好记住。
2025-04-02 11:05:07
936
原创 因内存不足原因导致fragment空白解决方案
在androidx之前,一般我们防止Fragment重建是在actvitity的onCreate方法中使用savedInstanceState?.remove(“android:support:fragments”)或者savedInstanceState?但是在androidx中,使用这两行代码不生效,但是看FragmentActivity中的FRAGMENT_TAG还是android:support:fragments,那为什么会不生效呢,后来点进去看发现。
2024-12-18 09:55:43
416
原创 Android安卓进程保活(二):双进程拉活
当一个进程结束后,立刻调用启动另一个进程,这样实现互相调用,互相启动( 只有在一个进程结束时候才会启动另一个进程)
2024-12-12 15:54:53
331
原创 Android安卓进程保活(一):设置前台Service
首先你要知道Android中的进程以及它的优先级,下面来说明它进程用户当前操作所必需的进程。如果一个进程满足以下任一条件,即视为前台进程:托管用户正在交互的 Activity(已调用 Activity 的 onResume() 方法)托管某个 Service,后者绑定到用户正在交互的 Activity托管正在“前台”运行的 Service(服务已调用 startForeground())
2024-12-12 14:09:07
1324
原创 箭头函数和普通函数的区别
箭头函数(Arrow Function)和普通函数(Regular Function)是JavaScript中的两种函数定义方式,它们在语法和功能上有一些区别。下面我将详细介绍箭头函数和普通函数的区别。
2024-12-12 10:25:12
254
原创 JS 基本类型和引用类型
基本的数据类型有:`undefined,boolean,number,string,null.基本类型的访问是按值访问的,就是说你可以操作保存在变量中的实际的值。
2024-12-02 16:55:09
1121
原创 TypeScript和JavaScript的区别
在TypeScript中定义函数的语法为code 函数要执行的代码;其中 function 为声明函数的关键字,function_name 为自定义函数的名字,arg为参数列表,_returntype为该函数的返回值类型,code为函数被调用时要执行的代码,使用return关键字返回数据,data为要返回的数据,要使用“{}”括起来。function add(x: number, y: number): number { //定义返回值为number类型的函数return x+y;add(5,6)
2024-12-02 14:56:13
1534
原创 React Native学习笔记(三)
RN中的核心组件,是对原生组件的封装官网的核心主键,React Native 具有许多核心组件,从表单控件到活动指示器,应有尽有。将主要使用以下核心组件:Button是一个简单的跨平台的按钮组件。上面这段代码会在 iOS 上渲染一个蓝色的标签状按钮,在 Android 上则会渲染一个蓝色圆角矩形带白字的按钮。点击这个按钮会调用"onPress"函数,具体作用就是显示一个 alert 弹出框。你还可以指定"color"属性来修改按钮的颜色。再试试下面这个使用Button的例子吧。
2024-11-29 16:43:01
1037
原创 React Native学习笔记(一)
1.1、指令创建React Native 有一个内置的命令行界面,你可以用它来生成一个新项目。您可以使用 Node.js 附带的 访问它,而无需全局安装任何内容。让我们创建一个名为“AwesomeProject”的新 React Native 项目现在ReactNative的项目就创建完成了,我们就用VScode打开,运行项目以及编辑。
2024-11-29 15:02:19
2170
1
原创 Flex(弹性布局)
采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目"。容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。项目默认沿主轴排列。
2024-11-28 14:51:54
902
原创 鸿蒙Next 单元测试框架——hypium
单元测试框架(hypium)是HarmonyOS上的测试框架,提供测试用例编写、执行、结果显示能力,用于测试系统或应用接口。表1 单元测试框架功能特性。
2024-08-30 14:13:47
3447
原创 测试驱动开发(TDD)
测试驱动开发是一种迭代开发方法,强调在编写代码之前先编写测试用例。这些测试用例定义了预期的功能和行为,然后开发人员编写足够的代码来满足这些测试。TDD的核心理念是“红-绿-重构”,即先编写失败的测试(红),然后编写代码使其通过测试(绿),最后进行代码重构以保持代码质量。
2024-08-29 14:26:05
1873
原创 鸿蒙APP真机运行及证书签名打包
整个签名到打包的过程确实很漫长,4个签名相关的文件创建就要费九牛二虎之力,还需要要开发者账号才可以做鸿蒙开发,所以门槛还是存在,务必要注意cmd工具在使用时需要运行管理员权限再执行,hdc命令也是一样,遇到失败多尝试,总会解决。
2024-06-17 15:39:35
1960
原创 音视频——视频流H264编码格式
我们了解了什么是宏快,宏快作为压缩视频的最小的一部分,需要被组织,然后在网络之间做相互传输。H264更深层次 —》宏块 太浅了 如果单纯的用宏快来发送数据是杂乱无章的,就好像在没有集装箱出现之前,货物总是随意被堆放到船上。上货(编码),下货是非常痛苦的。当集装箱出现之后,一切都发生了改变,传输效率大大增高。 集装箱可以理解成H264编码标准,他制定了相互传输的格式,将宏快 有组织,有结构,有顺序的形成一系列的码流。
2023-07-26 18:06:44
1508
原创 音视频——帧内预测
4×4亮度子块有9种可选预测模式,独立预测每一个4×4亮度子块,适用于带有大量细节的图像编码;16×16亮度块有4种预测模式,预测整个16×16亮度块,适用于平坦区域图像编码;色度块也有4种预测模式,类似于16×16亮度块预测模式。如图6.14所示,4×4亮度块的上方和左方像素A~M为已编码和重构像素,用作编解码器中的预测参考像素。其中模式2(DC预测)根据A~M中已编码像素预测,而其余模式只有在所需预测像素全部提供才能使用。4种预测模式类似于帧内16×16预测的4种预测模式,只是模式编号不同。
2023-07-26 11:17:58
1451
原创 音视频——压缩原理
H264压缩技术主要采用了以下几种方法对视频数据进行压缩。帧内预测压缩,解决的是空域数据冗余问题。帧间预测压缩(运动估计与补偿),解决的是时域数据冗徐问题。整数离散余弦变换(DCT),将空间上的相关性变为频域上无关的数据然后进行量化。CABAC压缩。I帧:关键帧,采用帧内压缩技术。P帧:向前参考帧,在压缩时,只参考前面已经处理的帧。采用帧音压缩技术。B帧:双向参考帧,在压缩时,它即参考前而的帧,又参考它后面的帧。采用帧间压缩技术。除了I/P/B帧外,还有图像序列GOP。
2023-07-25 18:07:28
1238
原创 音视频——封装格式原理
将视频像素数据(RGB,YUV等)压缩成视频码流,从而降低视频的数据量。MPEG/ITU-T2013研发中名称推出机构推出时间目前使用领域H.264MPEG/ITU-T2003各个领域MPEG4MPEG2001不温不火MPEG2MPEG1994数字电视VP9Google2013研发中VP8Google2008不普及VC-12006微软平台视频编解码的过程–>对数字视频进行压缩或解压缩的过程。
2023-07-25 16:56:42
2430
MyPressSoftWare
2023-02-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人