- 博客(68)
- 收藏
- 关注
原创 Android学习总结之handler源码级
Handler 机制的核心是通过Looper(消息循环)、MessageQueue(有序消息链表)、Handler(消息收发器)的协作,实现线程间的安全通信。源码中大量使用 ThreadLocal、synchronized、单链表等技术,确保线程隔离、数据安全和性能优化。深入理解这些细节,能帮助开发者更好地处理线程通信、避免内存泄漏(如非静态内部类 Handler 导致的 Activity 泄漏),并在复杂场景中灵活运用 Handler 机制。
2025-04-03 19:43:05
689
原创 解决Gradle下载过慢问题手把手教学
在 Android 开发过程中,Gradle 作为强大的构建工具,极大地便利了项目的构建与管理。但不少开发者都被 Gradle 下载过慢的问题所困扰,这不仅拖慢开发进度,还影响开发心情。
2025-04-02 19:54:39
206
原创 Kotlin 作用域函数:apply、let、run、with、also
明确目标:配置对象用apply,处理 null 用let,混合逻辑用run关注返回值:需保持对象链式调用选applyalso,需计算结果选letrun代码风格:习惯扩展函数用applyletrun,习惯参数化调用用with这些函数并非互斥,而是互补。例如,apply配合also可实现 “配置 + 日志” 的复合操作,let配合run可处理 null 值并执行复杂逻辑。熟练运用这组工具,能让代码兼具简洁性与可读性,真正体现 Kotlin 的优雅与高效。
2025-04-01 15:23:18
1684
原创 Android学习总结之Kotlin 协程
定义:协程是基于线程的轻量级 “线程”,通过suspend挂起函数实现异步逻辑同步化。核心特点是可挂起恢复,避免阻塞主线程。优势:比线程更轻量(一个线程可运行多个协程),通过调度器灵活切换线程,确保 UI 线程安全。内存占用更少:协程不需要独立的栈内存,而是共享调用栈,大大减少了内存开销。低切换开销:协程切换在用户态完成,无需与操作系统交互,切换代价小。高并发模型:在同一线程上可以高效地运行大量协程,不受传统线程创建和管理的限制。
2025-04-01 15:14:36
400
原创 Android 单例模式全解析:从基础实现到最佳实践
单例模式(Singleton Pattern)是软件开发中常用的设计模式,其核心是确保一个类在全局范围内只有一个实例,并提供全局访问点。在 Android 开发中,单例模式常用于管理全局资源(如网络管理器、数据库助手、配置中心等),避免重复创建对象造成的资源浪费。本文将详细解析 Android 中单例模式的六种常用实现方式,对比其优缺点及适用场景,并结合 Android 特性给出最佳实践。
2025-03-31 15:22:25
832
原创 Android学习总结之RecyclerView补充篇
/ 旧数据集大小// 新数据集大小// 判断是否为同一个 Item(建议用唯一 ID 比较)// 判断内容是否变化(建议重写 equals 或字段对比)// 可选:返回差异化载荷(如仅标题变更)})场景优势:跳过未变化控件的绑定逻辑,进一步减少 CPU 计算。最小化差异计算范围避免在和中执行复杂逻辑,确保快速返回结果。对大数据集(如万级列表),考虑分页加载或增量更新,减少单次计算量。结合缓存机制配合 RecyclerView 的和。
2025-03-31 14:59:31
949
原创 Android学习总结之RecyclerView篇
影响范围影响整个数据集,而只影响指定位置的数据项。性能开销可能会导致整个的重新布局和绘制,性能开销较大;只处理指定位置的数据项,性能开销较小。使用推荐:在可能的情况下,推荐使用或其他更具体的通知方法(如等),因为它们可以提供更好的性能和动画效果。在实际开发中,应该根据数据变化的具体情况选择合适的方法来通知更新,以确保应用的性能和用户体验。在中,方法用于设置的缓存大小,这是一个重要的性能优化手段。允许多个实例共享一个公共的缓存池,这在有多个使用相同视图类型的适配器时非常有用,比如在使用ViewPager。
2025-03-31 14:47:09
578
原创 Android学习总结之网络篇补充
包含有关请求和响应的额外信息,如Content-Type、Content-Length、User-Agent等。通过HTTP/2的多路复用或长连接(Keep-Alive)减少连接建立和关闭的开销。客户端收到SYN-ACK报文后,发送一个ACK(确认)报文作为响应,完成握手。利用HTTP缓存策略减少不必要的网络请求,使用内存缓存和磁盘缓存存储请求结果。主要协议是IP(网际协议)。三次握手是TCP连接建立的过程,而四次挥手是TCP连接终止的过程。一个无状态的、应用层的协议,用于从网络传输超文本到本地浏览器。
2025-03-30 09:04:49
585
原创 Android学习总结之通信篇
这并不是 Intent 的限制,而是 Binder 本身的限制。Binder 是一种高效的通信机制,但它有一个重要的限制,就是事务缓冲区的大小。共享限制:这个事务缓冲区是由系统服务、应用程序等共享的,因此单个 Intent 传输的数据不能太大,以免占用过多的缓冲区空间导致系统不稳定。轻量级传输:Intent 更适合传递小的、结构化的数据,如字符串、数值和小型对象,而不是大量的二进制数据(如图片、大型文件等)。通过 Binder 传递数据时,会受到 Binder 事务缓冲区大小的限制,约为 1MB。
2025-03-30 08:56:30
1114
原创 Android学习总结之ContentProvider跨应用数据共享
在中注册 Provider,声明唯一的authority(通常为包名)和访问权限:<providerContentProvider 的核心价值在于标准化与安全性:通过统一的生命周期方法和 URI 驱动的操作模型,实现跨应用数据的可控共享。理解其生命周期方法的设计初衷(如onCreate()的初始化职责、query()的非空 Cursor 规范),并结合具体业务场景优化实现(如批量操作、权限控制),是构建健壮数据共享方案的关键。
2025-03-29 16:53:21
1084
原创 Android Jetpack学习总结(源码级理解)
通过ViewModelLiveData,可以实现数据的生命周期感知,并且在配置变更(如设备旋转)时也能保持 UI 的状态。此外,这种模式使得数据和 UI 的逻辑更为清晰、解耦、易于维护。同时结合Lifecycle,通过结构化和简化生命周期管理,使得生命周期感知组件在 Android 开发中更为高效,也有助于减少潜在的内存泄漏和其他生命周期相关的问题。
2025-03-29 16:37:23
1090
原创 Android ViewModel学习总结(源码级理解)
突破性能力ViewModel默认只能抵御配置变更,但进程被系统杀死时数据仍会丢失。通过集成SavedStateHandle,可将数据写入系统管理的Bundle,实现跨进程销毁的数据恢复。技术实现:init {底层通过AbstractSavedStateViewModelFactory,在ViewModel初始化时自动注入SavedStateHandle对象。进阶方案:1. 继承ViewModel并重写onCleared()
2025-03-29 16:22:44
1131
原创 Android学习总结之MMKV(代替SharedPreferences)
在 Android 开发领域,SharedPreferences(SP)作为官方推荐的轻量级存储方案,曾是开发者的首选。然而,随着应用复杂度提升,SP 的缺陷逐渐暴露:ANR 风险、性能瓶颈、多进程灾难等问题频发。据统计,某头部应用因 SP 导致的 ANR 占比高达 18%,而微信团队通过自研 MMKV 实现了零 ANR 的突破。本文将深度解析 MMKV 如何解决 SP 的 "七宗罪",并揭秘其碾压级技术方案。
2025-03-28 16:07:40
918
原创 Android面试总结之Glide源码级理解
解答:通过枚举,可以自定义Glide的缓存行为:缓存原始图片和转换后的图片到磁盘缓存。不使用磁盘缓存。只缓存转换后的图片到磁盘缓存。只缓存原始图片到磁盘缓存。
2025-03-28 15:47:25
1204
原创 Android面试总结之Handler 机制深入探讨原理、应用与优化
Handler 机制是 Android 开发中线程间通信的重要手段,深入理解其源码级机制对于编写高效、稳定的 Android 应用至关重要。从 Message、MessageQueue、Looper 到 Handler,它们相互协作,共同完成了消息的发送、存储、循环取出和处理的过程。在不同线程中正确使用 Handler,合理利用其应用场景和优势,能够有效提升应用的性能和用户体验。希望通过本文的深入剖析,能帮助开发者更好地掌握 Handler 机制,在 Android 开发中更加游刃有余。
2025-03-27 14:38:47
1152
原创 Android第七次面试总结(Java和kotlin源码级区别 )
Kotlin 代码从编写到最终打包成 APK 经历多个阶段,主要包括 Kotlin 代码编译、字节码处理和 APK 打包三个主要步骤。Kotlin 代码编译成 Java 字节码并打包到 APK 是一个复杂的过程,涉及多个步骤和工具。通过这些步骤,Kotlin 代码能够在 Android 设备上正确运行。
2025-03-26 20:54:51
804
原创 Android学习总结之算法篇二
LRU(Least Recently Used)即最近最少使用算法,是一种常用的缓存淘汰策略。其核心思想是:当缓存容量已满时,优先淘汰最久未被访问的数据,以保证缓存始终存储高频访问的热点数据。get(key):获取指定键的值,若存在则返回并更新其访问顺序:插入或更新键值对,若容量不足则淘汰最久未使用的键。
2025-03-26 10:45:51
248
原创 Android面试总结之Android RecyclerView:从基础机制到缓存优化
通过视图复用和四级缓存实现了高效的列表渲染,其设计思想对理解现代 UI 框架具有重要参考价值。在实际开发中,需根据业务场景合理配置缓存参数,结合DiffUtil等工具实现性能与体验的平衡。!!
2025-03-25 22:05:28
687
原创 高性能 Android 自定义 View:数据渲染与事件分发的双重优化
adapter;@Overridei++) {优化维度关键技术收益数据渲染视图复用 / 按需绘制 / 硬件加速内存降低 50%,帧率提升 30%事件处理精准拦截 / 手势检测 / 惯性滚动响应延迟减少 40%内存管理弱引用缓存 / 资源及时释放GC 频率降低 60%最佳实践建议优先使用处理列表,自定义 View 仅用于特殊布局滑动过程中避免复杂计算,使用延迟处理结合监控内存与帧率对不可见区域视图设置而非隐藏使用ViewStub。
2025-03-25 13:27:37
570
原创 Android第六次面试总结(自定义 View与事件分发)
在 Android 中实现自定义 View 处理 1 万条数据的流畅滑动,需结合视图复用、按需绘制、硬件加速等核心技术。以下是具体实现方案:对象池管理:使用缓存闲置视图,避免频繁创建销毁2. 按需绘制(仅渲染可见区域) 计算可见范围:根据滚动偏移量()和视图高度,确定需绘制的起始和结束索引。 二、实现步骤1. 数据适配器设计 抽象数据适配器:分离数据逻辑与视图渲染。2. 触摸事件处理 惯性滚动实现:使用和。三、性能监控与调优1.
2025-03-25 13:24:21
1341
原创 Flutter 中 GetX 的优缺点及常见问题解决方案
GetX 适用于需要快速迭代的中大型项目,尤其适合需要高效状态管理与路由控制的场景。遵循官方最佳实践(如控制器命名规范)定期重构复杂控制器结合单元测试验证依赖注入关注官方更新日志(GitHub 仓库)!!
2025-03-25 13:07:24
435
原创 Android第六次面试总结(okhttp篇)
OkHttp 的缓存机制通过遵循 HTTP 缓存协议,结合拦截器和来实现高效的缓存管理。合理配置缓存策略和验证机制,可以有效减少网络请求,提升应用性能和用户体验。OkHttp 的拦截器机制提供了强大的扩展性和灵活性,通过合理使用应用拦截器和网络拦截器,可以实现日志记录、请求头添加、缓存控制、错误处理等多种功能。深入理解拦截器链的执行流程和不同拦截器的特点,有助于更好地利用拦截器来优化网络请求。!!
2025-03-24 21:49:02
1125
原创 Android第六次面试总结(Java设计模式二)
LiveData是 Jetpack 中实现观察者模式的重要组件,它通过观察者模式实现了数据的实时更新和通知。同时,Jetpack 提供的注解(如@NonNull@Nullable等)可以帮助开发者提高代码的安全性和可读性,避免一些常见的错误。
2025-03-24 21:22:35
627
原创 Android第六次面试总结(Java设计模式篇一)
工厂模式是一种创建型设计模式,它提供了一种创建对象的方式,将对象的创建和使用分离。其核心思想是定义一个创建对象的接口,让子类决定实例化哪个类。这样做的好处是提高了代码的可维护性和可扩展性,使得代码更符合开闭原则,即对扩展开放,对修改关闭。
2025-03-24 19:46:26
1337
原创 项目总结:GetX + Kotlin 协程实现(依赖注入补充)
当用户在控制中心切换歌曲时,依赖注入的 WebSocket 客户端会实时通知所有相关模块,而 UI 层通过注入的状态控制器自动更新,整个过程无需手动管理模块间的通信。
2025-03-24 15:21:24
528
原创 项目总结:GetX + Kotlin 协程实现跨端音乐播放实时同步
这些数据通常是静态的或不经常变化的,使用 HTTP 请求可以利用其成熟的缓存机制和错误处理机制。多端播放进度精准对齐是一个复杂的问题,主要难点在于不同设备的时间戳可能不一致,网络延迟也会影响同步的准确性。当检测到网络波动时,协程自动重试 WebSocket 连接,并缓存未同步的播放事件,网络恢复后批量补发。块中,我们为 ExoPlayer 添加了事件监听器,根据不同的状态更新相应的。的变化,当这些状态发生变化时,UI 会自动更新。列表来缓存未同步的播放事件。,当接收到新的事件时,更新 UI 显示事件信息。
2025-03-24 15:17:22
707
原创 Android 图片加载框架:Picasso vs Glide
在 Android 开发中,图片加载是移动应用的核心功能之一。合理选择图片加载框架不仅能提升用户体验,还能优化内存管理和应用性能。本文将深入对比 Picasso 和 Glide 两大主流框架,结合代码示例分析它们的差异、工作原理及优化策略。从上述代码可以看出,二者基本的图片加载方式都是链式调用,语法较为相似。Picasso 只缓存全尺寸图片,以下是简单使用示例。Glide 支持按尺寸缓存,并且可以自定义缓存策略。表示同时缓存原始图片和处理后的图片。获取实例,Glide 使用。在上述 Glide 代码中,
2025-03-23 21:05:34
1301
原创 Android卷笔试题目总结
第一题:输入一个字符串,将其大写字母转为小写,小写字母转为大写。然后计算下标为奇数的ASCII码的和。前面一共45分,包括基础计算机四大件,和Android的知识点之类的理论问的挺细。第二,三题没做出来 都不是简单的二叉树,是树结构之类的算法。我之后去刷类似的题目去了。
2025-03-22 21:13:52
348
原创 Android第五次面试总结(HR面)
例如,《移动应用开发》课程中,我用 Kotlin 重构了计算器应用,通过 Jetpack Compose 实现动态 UI,最终作业被选为课程范例。在 “智能手环数据同步” 项目中,我因过度追求技术新颖性,选择当时不成熟的 Kotlin 协程处理多设备连接,导致大量内存泄漏。学习在实验室打代码,压力释放的方式,大一的时候打篮球,大二大三跑步,快走散步聊天来化解压力。竞赛方面的经历,大一的时候,学长导师带着做项目,大二大三的竞赛就是我来主导项目。主要聊一聊学校,竞赛,学习,压力释放之类的问题。
2025-03-21 22:23:21
1053
原创 Android第五次面试总结(网络补充)
DNS 作为互联网的核心基础设施,通过分层的分布式数据库架构(根域→顶级域→权威服务器),结合递归与迭代查询机制,利用 UDP/TCP 协议将人类可读的域名解析为 IP 地址,同时通过 DNSSEC 验证、DoH/DoT 加密等技术抵御劫持攻击,未来将深度融合区块链分布式存储和量子安全算法实现架构升级。
2025-03-20 21:45:49
930
原创 Android第五次面试总结(网络篇)
缓存策略:实现二级缓存(应用层 + 系统层)协议选择:优先使用 DoH/DoT 加密解析性能监控:建立 DNS 解析耗时统计体系容灾方案:配置备用 DNS 服务器(如 114.114.114.114)版本适配:针对 Android 8 以下系统进行兼容性处理通过深入理解 Android DNS 解析机制,开发者可以构建更健壮、更安全的网络连接方案。未来随着 5G 网络的普及和边缘计算的发展,DNS 解析将在移动应用中扮演更加重要的角色,需要持续关注技术演进并进行针对性优化。!!
2025-03-20 21:20:49
757
原创 Android第三次面试(网络篇补充)
TCP(传输控制协议)的 “模式” 通常指其核心工作机制和特性,这些机制共同确保数据传输的可靠性、效率和稳定性。以下是 TCP 的主要模式和特点,用通俗易懂的语言解释:TCP 通过多种模式协同工作:TCP 的三次握手和四次挥手是建立和终止连接的核心流程,下面用通俗易懂的语言和生活场景类比详细解释:确保双方都准备好通信,并同步初始序列号(防止历史数据干扰)。第一次握手:客户端发起请求(SYN)第二次握手:服务器确认并响应(SYN+ACK)第三次握手:客户端确认(ACK)双方确认数据传输完毕,释放资源。第一次挥
2025-03-20 13:58:08
910
原创 面试总结之Android Bitmap 深度解析与性能优化
在 Android 中,加载图片时若直接将大尺寸图片完整加载到内存,会占用大量内存,容易引发内存溢出问题。采样率压缩的核心在于在加载图片时,根据需要的尺寸计算合适的采样率,然后使用该采样率对图片进行解码。JPEG 格式通过去除人眼不太敏感的图像细节,来实现文件大小的减小。质量参数取值范围是 0 - 100,0 代表最低质量(文件最小),100 代表最高质量(文件最大)。为 2 时,表示图片的宽度和高度都变为原来的 1/2,像素数量变为原来的 1/4。方法会根据指定的缩放比例创建一个新的。
2025-03-20 13:47:11
528
原创 面试总结之基于 Room + WorkManager 的离线缓存系统实践
Room 与 WorkManager 的深度结合为 Android 应用提供了离线缓存与数据同步的完整解决方案,通过 ORM 支持和后台任务调度确保数据一致性。
2025-03-20 09:39:57
1591
原创 面试总结之 Glide自定义的三级缓存策略
根据 Google 统计,图片加载延迟超过 1 秒会导致 32% 的用户流失。总结:通过合理配置和优化,可显著提升应用性能,降低用户流失率。方法里,先获取设备的最大内存,接着计算出内存缓存的大小,这里设定为最大内存的 15%,最后使用。方法里,先设置磁盘缓存的路径,再将磁盘缓存的大小设置为 100MB,最后使用。Glide 通过三级缓存策略,将图片加载速度提升 50%,内存占用降低 45%方法中,先设置网络缓存的路径和大小(这里是 50MB),然后创建。方法设置磁盘缓存策略,这里表示缓存所有类型的图片。
2025-03-19 22:27:19
708
原创 Android学习总结之算法篇一(第四次面试)
这是我在Android面试中遇到的算法题 ,希望可以对你有所帮助!二、viewgroup的广度搜索遍历子view(不限制二叉树)
2025-03-18 21:05:43
471
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人