- 博客(63)
- 资源 (1)
- 收藏
- 关注
原创 Android Jetpack | DataBinding
当数据发生变化时,UI 自动更新;当用户与 UI 交互时,数据自动同步;Databinding数据驱动UI的更新的核心我们可以根据下图来做一个总结。如图:被观察者有一个管家PropertyChangeRegistry mCallbacks,该管家对注册的监听进行管理,监听是间接的持有ViewDatabinding的引用;当被观察者发生改变,并不是像传递的观察者模式一样,直接持有观察者的引用去进行通知,而是通知管家,让管家将注册的监听进行全部遍历,
2025-08-26 12:56:24
373
原创 Android Jetpack | Hilt
用一句话概括,大体就是:“不要自己内部创建依赖,而是让外部提供的方式来完成”;核心思想是将程序的控制权从应用程序代码本身转移给一个外部容器或框架;3.2.5中使用到了Singleton注解,这个是作用域注解,作用是为依赖项提供生命周期管理;作用域必须与Component的作用域匹配,组件跟作用域关系如下:作用域注解绑定到的组件生命周期@Singleton应用级别(整个应用生命周期)Activity 生命周期Fragment 生命周期View 生命周期。
2025-08-22 22:30:48
881
原创 Android Jetpack | ViewModel
本文重点对ViewModel的复用原理的详细细节展开了分析,分两种情况,带SavedStateHandle的情况下与不带SavedStateHandle的情况。其中,前者即使应用因内存不足导致进程被杀掉后重建,虽然重建前后的ViewModel不是同一个,但ViewModel依旧可以复用,其底层依赖于Bundle,而因配置文件改变的重建,复用的是同一个ViewModel;而后者在应用进程被杀掉的情况下是不能实现复用的,因配置改变重建是可以实现复用的,重建前后复用的是同一个ViewModel;
2025-08-20 12:23:46
717
原创 Android Jetpack | Livedata
本文通过对Livedata的核心原理以及粘性事件产生跟处理和递归调用的容错处理的逻辑进行讲解。合理使用Livedata在Mvvm架构中有助于写出更易于维护和管理的代码。
2025-08-17 22:12:15
797
原创 Android Jetpack | Lifecycle
结合源码分析,代码执行流程大体如下Activity里面lifecycle事件的分发会根据API的不同其实现有差异,大于等于29是采用注册的回调的方式,低于29是使用无UI的ReportFragment来实现lifecycle事件的分发;宿主的每一个生命周期发生变化的时候会发送一个事件,根据事件推导宿主的状态,所有的观察者根据宿主的状态进行升级或降级以保持同步;
2025-08-16 15:52:02
837
原创 Android音视频探索之旅 | Webrtc 1对1音视频通话核心流程分析
本文重点梳理了使用WebRTC实现1对1音视频通话端对端的基本流程,流程分为三部分:媒体协商(交换SDP信息)、candidate交换(建立网络连接)、数据传输。同时对Android端引入Webrtc,其核心类的讲解。
2025-07-18 17:55:55
905
5
原创 Android音视频探索之旅 | C++层使用OpenGL ES实现音频渲染
项目代码可以在码云上面进行下载,6.0以上的设备需要手动开启动态权限,这部分代码没有写在项目里面。通过OpenGL ES来渲染音频也是很有必要要熟练掌握的。
2025-07-12 19:18:10
777
原创 Android音视频探索之旅 | C++层使用OpenGL ES实现视频渲染
*** @创建者 Jack* @创建时间 2025-07-12 12:40* @描述*///适配Android8.0及以上 无法正常渲染视频的问题@Override@Override@Override@Override@Override@Override@Override//注意:需要手动开启存储权限并在MainActivity中引入使用项目代码可以在码云上面进行下载,6.0以上的设备需要手动开启动态权限,这部分代码没有写在项目里面。
2025-07-12 16:28:06
638
1
原创 Android音视频探索之旅 | CMake基础语法 && 创建支持Ffmpeg的Android项目
本篇文章记录了最常用的CMake语法,以及在Android项目的使用。
2025-07-03 15:52:39
978
原创 Android NDK探索之旅(一)
本文从整理的角度来讲解Android NDK。包含必要的概念了解,并将“典型的JNI多线程实现”案例进行剖析,展示了Java层调用Native层以及如何安全地从Native线程回调Java层。在细节方面:如Native方法中JNIEnv的相关api的使用以及CMakeLists.txt的语法等并未进行展开,这块的内容要在实际开发中逐步积累。对Android NDK有了全局的认识,细节方面的累计只是时间问题,当然Native的代码学习少不了C/C++的基础。
2025-07-01 18:22:26
811
原创 使用SRS(Simple RTMP Server)搭建RTMP流媒体服务器
细节很重要,比如:端口号被占用及其安全组和防火墙设置,安全组相对容易想到,但容易疏忽的是防火墙设置。
2025-06-27 13:58:56
709
原创 Uniapp 使用Android studio进行离线打包
经过以上步骤就可以实现uniapp使用Android studio进行离线打包,当更改了BuilderX的内容,重复步骤6和9即可,如果需要使用离线打包的Apk来上架,还得要把图标以及应用名称等进行设置才行(这块不做记录,自行查询即可)。
2025-04-16 22:27:04
1352
原创 Uniapp打包H5端弱网络环境下存在页面UI渲染错乱问题方案实现
通过以上两个方面的处理,弱网络环境下出现的页面UI渲染错乱问题有个较好的解决。
2025-03-08 11:46:38
808
原创 Uniapp打包H5端实现图片缓存方案
只需要将步骤二中的js文件复制到项目中,然后按照使用说明就可以快速地实现H5端的离线缓存。对于清除旧的缓存的方法可以改成LRU方案,每一个缓存下来的图片增加一个时间标记,同时有新缓存时检查一下缓存大小是否超过阈值,然后更改清除旧的缓存的逻辑即可;而APP端的离线缓存建议使用插件市场中的组件,可以选择;
2025-03-06 11:59:47
720
原创 Uniapp打包H5端实现微信分享好友、微信朋友圈
Uniapp打包H5端实现微信分享好友、微信朋友圈的需求实现重点在于细节,希望能给初次接触该需求的同学节省时间,若有疑问,欢迎留言。
2025-02-12 11:49:31
3857
原创 Flutter实战记录-协作开发遇到的问题
报错信息如截图所示根据报错信息可以知道,是因为flutter模块下的.android文件夹不存在。尝试在提交代码时候,将flutter的.gitignore中的.android/和.ios/不要进行配置,可以处理问题A;+初步推测,跟Flutter sdk等有关系;环境统一,估计该问题就可以解决;针对类似的场景,以上两个问题,可以通过一个命令来进行解决,在flutter模块下执行命令:flutter create .未执行命令前:执行命令后:
2024-05-07 20:23:02
427
原创 Android FrameWork探索之旅(一)
1.7.创建aosp文件夹,使用命令:makdir ~/aosp,将下载好的文件移动到aosp中。1.8.安装解压工具,命令:sudo apt-get install p7zip。1.9.因为内存不足的原因,为保险起见,设置一下交换空间,1.11.启动模拟器出现报错。
2024-05-04 18:56:41
239
原创 Rxjava框架学习总结
本文选取了Single的使用来分析了Rxjava的核心原理,同时在最后使用了Rxjava3和Retrofit2封装成网络模块,提供了简易的Api提供给外界使用(新项目中网络部分使用的是协程对Jetpack的支持库结合Retrofit以及Flow来进行封装的,这部分知识会逐步在上方项目中进行实现)。
2023-07-17 10:57:34
371
原创 图片框架Glide学习总结及插件实现
本文针对仅对Glide的部分知识做了一下总结,运用了单例,构建者设计模式对Glide图片加载框架的封装并生成插件(后续会逐步的完善)。该插件的优点:对于使用者而言不需要关注底层具体使用的是哪一种加载框架,若需要替换加载框架,只需要替换GlideManager和GlideUtil即可。该插件的封装方式虽然使用的是Kotlin语言,但同样适用与Java语言。若使用Kotlin,我们可以使用DSL的方式(下方的项目中有示例)或者拓展函数的方式来封装Glide。项目地址。
2023-07-06 10:01:38
1033
原创 自定义RecyclerView.LayoutManager实现类实现卡片层叠布局的列表效果
核心在于两点,其一:自定义RecyclerView.LayoutManager实现类,重写onLayoutChildren方法,对子item进行“绘制”;其二:自定义ItemTouchHelper.Callback实现类,重写onChildDraw和onSwiped方法;快速实现只需要按照前言中的方式进行配置即可,若想要了解细节,可以看插件代码中的注释(写的还是比较详细);
2023-04-23 23:11:38
1736
2
原创 RecycleView与TabLayout联动展示更多功能列表页面的实现
TabLayout和RecycleView的联动关键在于两个监听的设置,同时将上方提及的几个细节注意一下即可;
2023-04-23 21:05:33
1939
原创 Manifest merger failed with multiple errors, see logs
运行项目报错(这是一个比较常见的问题,还是记录一下):Manifest merger failed with multiple errors, see logs解决方案,(控制台)执行命令: gradlew processDebugManifest -stacktrace日志信息如下:> Task :app:processDebugManifest FAILED/xxx/AndroidManifest.xml:32:5-66 Warning: Element.
2020-09-07 19:11:32
364
原创 AAPT: error: attribute android:requestLegacyExternalStorage not found
报错(如下):xxx/AndroidManifest.xml:30:5-482:19: AAPT: error: attribute android:requestLegacyExternalStorage not found.处理方案:You need to update your Android SDK build tools to 29-您需要将Android SDK构建工具更新到29备注:是否还有其它解决方案,暂时还不清楚。暂时做一个笔记,后续有精力再探索产生该问题的原因。...
2020-07-22 17:00:47
18275
4
原创 AAPT: error: duplicate value for resource ‘attr/xxx‘ with config ‘‘, file failed to compile.
bug出现场景:迁移一个老项目新IDE(AS 3.6.3),经过修改一些配置,项目编译通过,运行的时候出现如果错误。/用户名路径/.gradle/caches/transforms-2/files-2.1/fe76808470c2aae890b80fb0fe4dd9b3/design-23.4.0/res/values/values.xml:19:5-827: AAPT: error: duplicate value for resource ‘attr/layout_anchorGravity..
2020-07-13 13:03:48
14420
2
原创 It is not allowed to subscribe with a(n) xxx multiple times.Please create a fresh instance of xxx
记录一个关于rxjava的报错问题,原因(可能是原因之一):subscribe方法使用时,将Observer对象非正常的使用了多次。一、报错信息如下二、关键信息It is not allowed to subscribe with a(n) xxx.QuestionActivity$1 multiple times.Please create a fresh instance of xxx.QuestionActivity$1 and subscribe that to the target.
2020-06-16 13:04:39
923
原创 工具使用-Linux(kubuntu)系统GitBook环境搭建
工具使用-Linux(kubuntu)系统GitBook环境搭建一.前言在本次安装gitbook之前,已经装过3次,分别是kubuntu系统(有一两年,忘记了)和manjaro(一路顺风)系统,这一次在kubuntu安装并不顺利,于是决定进坑的姿势记录一下,为下次搭建环境节省时间。文章记录顺序的是整个安装过程遇到的问题,以及如何查询资料,到最终环境搭建完成。二.安装过程1.gi...
2020-05-06 19:22:53
523
原创 Linux常用命令(值得收集)
Linux命令简介黑马视频学习笔记,去年在语雀上做的笔记-2019-04-04-Linux命令简介,在此汇总一下。一.学习Linux命令的原因Linux刚面世时并没有图形界面,所有的操作全靠命令完成,如 磁盘操作/文件存取/目录操作/进程管理/文件权限 设定等;服务器维护的工作是远程通过SSH客户端来完成的,并没有图形界面.所有的维护工作都需要通过命令来完成;自己作为androi...
2020-05-06 10:46:44
701
原创 linux之kubuntu挂载硬盘
(可以直接看下一行…)时间是很宝贵的一个东西,尽量以简结的方式将问题的处理方案描述清楚;一.问题安装linux(kubuntu)系统的时候,采用的是手动分区的方式,只处理了一个硬盘(因为会涉及到硬盘的格式化),其它硬盘就需要做挂载处理;二.开始处理1.第一步使用命令,sudo blkid,输入密码后,控制台信息如下:jack@jack-coding:~$ sudo blki...
2020-05-01 15:01:28
702
原创 IllegalStateException: Room cannot verify the data integrity. Looks like you've changed schema but
前言使用Room出现的报错,不同场景报错原因可能不同,报错如下:Room cannot verify the data integrity. Looks like you've changed schema but forgot to update the version number. You can simply fix this by increasing the version n...
2020-03-31 21:13:38
11614
1
转载 【intellij idea】Project Structure 讲解
项目的左侧面板 项目设置->Project Project Settings -> ModulesSources面板 Paths面板dependencies面板 Project Settings - > Libraries &nbs...
2019-09-22 05:36:37
606
1
转载 解决ubuntu安装软件has install-snap change in progress错误
今天在ubuntu软件商店安装idea报错:cannot install "intellij-idea-community": snap "intellij-idea-community" has "install-snap" chang...
2019-09-22 05:02:23
2552
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅