- 博客(30)
- 收藏
- 关注
原创 【Android】OkHttp的使用及封装
OkHttp是一款高性能HTTP客户端库,支持同步/异步请求,提供GET/POST等请求方式。文章详细介绍了OkHttp的基本使用步骤,包括依赖添加、客户端创建、请求构建和响应处理。重点讲解了异步GET请求的实现,以及不同数据格式(纯文本、JSON、表单、文件等)的POST请求构建方法,包括如何设置MediaType和RequestBody。文中还强调了异步请求的回调处理需注意线程切换问题,并提供了错误处理和UI更新的示例代码。
2026-04-07 21:53:48
664
原创 【Android】HttpURLConnection解析
Android中的HttpURLConnection是Java标准库提供的HTTP客户端类,无需额外依赖即可进行网络通信。它提供了设置请求方法(GET/POST)、超时时间、请求头等核心功能,以及获取响应状态码、输入流等响应处理方法。使用HttpURLConnection时需要注意:必须在子线程中执行网络操作,设置合理的超时时间,并在finally块中调用disconnect()释放资源。虽然现代开发更推荐使用OkHttp等高级框架,但理解底层HttpURLConnection的工作原理对网络编程仍有重要价
2026-04-07 21:52:27
711
原创 【计算机网络】数据链路层
本文介绍了数据链路层的关键技术,主要包括封装成帧、差错检测和可靠传输三大机制。在封装成帧部分,阐述了通过添加帧头和帧尾实现透明传输的方法;差错检测部分对比了奇偶校验和循环冗余校验(CRC)的原理与性能;可靠传输部分详细分析了停止-等待协议、回退N帧协议和选择重传协议的工作原理及其适用场景。文章通过图示展示了各协议的数据传输流程,并比较了不同方法的优缺点,为理解数据链路层的基础功能提供了系统性的技术解析。这些机制共同保障了数据在不可靠物理链路上的可靠传输。
2026-04-03 13:46:06
605
原创 【Android】组件化搭建的一般流程
Android组件化开发摘要 组件化开发将Android应用拆分为独立模块,包括壳工程、业务组件和功能组件。通过gradle.properties中的isModule开关控制模块在组件模式(独立运行)和集成模式(合并打包)间切换。组件间通过路由通信,避免直接依赖。采用Gradle Version Catalog统一管理依赖版本,提升构建速度,降低耦合。组件化优势包括:加快编译速度、提高代码复用性、便于团队协作和维护。整体架构呈现分层依赖关系,上层业务组件依赖下层基础组件,实现高效模块化开发。
2026-04-03 12:52:26
637
原创 【计算机网络】物理层
异步传输:以字节为单位进行传输,字节之间的间隔不固定,但每个字节内的比特持续时长是相等的。换句话说,字节间异步,比特间仍是同步的。为此,需要给每个字节添加起始位和结束位。若光纤的直径减小到只有一个光的波长,则光纤就像一根波导那样,它可使光线一直向前传播,而不会产生多次反射,这样的光纤称为单模光纤。实际上,只要从纤芯中射到纤芯表面的光线的入射角大于某一个临界角度,就可产生全反射。因此,可以存在许多条不同角度入射的管线在一条光纤中传输,这种光纤称为多模光纤。外同步:在收发双方之间添加一条单独的时钟信号线。
2026-03-23 23:46:54
938
1
原创 【Android】深入理解Window和WindowManager
Android中的Window是UI视图的抽象载体,所有View都必须附着在Window上才能显示。Window通过WindowManager进行管理,主要提供添加、更新和删除View三个功能。Window分为应用窗口、子窗口和系统窗口三类,通过type属性控制层级显示顺序,flags属性决定窗口特性如焦点、触摸行为等。Window的实际实现是PhoneWindow,View通过ViewRootImpl与Window建立联系。开发者可以通过WindowManager添加悬浮窗等自定义窗口,但需注意权限和类型
2025-12-03 23:05:47
1098
原创 【Android】Binder机制浅析
BInder机制是Android系统提供的跨进程通信机制。本篇文章会从Linux的基础知识开始介绍,从基础概念引出Binder机制,接着分析Binder的通信模型和原理,最后将会手动实现AIDL完成进程间的通信。侧重点在于原理和使用上,适合初学者。
2025-12-02 15:59:56
1401
原创 【Git】Git的配置与使用(非常详细)
本文详细介绍了Git版本控制工具的核心概念、工作流程及常用操作。主要内容包括:Git的基本概念(仓库、工作目录、暂存区等);Git的安装与环境配置步骤;常用命令如初始化仓库、添加文件、提交修改、查看日志等;vi编辑器的基本使用方法;以及Git工作区与暂存区的状态转换机制。文章通过图文结合的方式,帮助读者快速掌握Git的基础操作,适合Git初学者学习参考。
2025-12-01 10:16:22
3701
原创 【Android】常见滑动冲突场景及解决方案
Android滑动冲突解决方案总结 本文介绍了Android开发中常见的三种滑动冲突场景:同向滑动冲突、异向滑动冲突和混合滑动冲突。文章分析了滑动冲突的根本原因在于系统无法判断用户意图让哪一层视图处理滑动事件,并提出了两种主要解决方案: 外部拦截法:通过重写父容器的onInterceptTouchEvent方法,根据业务逻辑决定是否拦截事件。 内部拦截法:通过子视图的dispatchTouchEvent方法配合requestDisallowInterceptTouchEvent(),控制父容器是否拦截事件。
2025-11-25 17:22:07
969
原创 【Android】 View事件分发机制源码分析
本文基于Android API 36源码,深入分析了View事件分发机制。主要内容包括:MotionEvent的事件类型(ACTION_DOWN、MOVE、UP等)和坐标获取方法;事件传递规则,从Activity到Window再到View的分发流程;ViewGroup事件分发源码解析,重点分析了down事件的处理逻辑和拦截机制;总结了11条重要的事件分发机制结论,如事件序列处理规则、ViewGroup默认不拦截事件、子View无法禁止父View拦截down事件等特性。文章通过源码分析揭示了Android触摸
2025-11-24 18:39:46
1121
原创 【Android】深入理解Activity的生命周期和IntentFilter
IntentFilter即”意图过滤器“,只有IntentFilter中的action,category,data都匹配时,才能成功启动目标Activity。当Intent 中所有的 Category 在 Filter 中有声明,即 Intent 的 Category 集合是 Filter 的 Category 集合的子集时,匹配成功。Intent 中携带的每一个 Category,都必须能在 Filter 声明的 Category 列表中找到。和Action不同的是,Intent可以通过。
2025-11-17 21:20:46
1205
原创 【Android】Android内存缓存LruCache与DiskLruCache的使用及实现原理
在Android中,通常会通过缓存策略来优化性能,同时也会减少不必要的流量消耗。比如,用户第一次使用网络加载一张图片后,下次加载这张图片的时候,并不会从网络加载,而是会从内存或者磁盘加载这张图片。
2025-11-10 17:21:18
866
原创 【Android】Lottie - 实现炫酷的Android导航栏动画
Lottie 是 Airbnb 开源的动画解决方案,可将 After Effects 制作的动画导出为 JSON 文件,在移动端实现高质量矢量动画。文章介绍了 Lottie 的基本概念,提供了动画资源网站,详细讲解了在 Android Studio 中的使用步骤:添加依赖、导入 JSON 文件、XML 和代码实现方式,以及播放控制、进度设置和动画监听等高级功能。通过 Lottie 可轻松实现底部导航栏等炫酷动画效果。
2025-11-02 17:33:40
2084
原创 【Android】从源码角度理解Handler机制
Handler通常用来做主线程与子线程之间的通信工具。比如,在子线程中进行耗时操作(网络请求、数据库操作等),子线程在获取数据后,使用Handler来进行UI更新:子线程拿到数据后,不直接更新界面,而是把数据通过一个消息(Message)发送出去;主线程这边,会提前准备好一个“接收器”——Handler对象。这个Handler对象会专门接受子线程发送来的数据,把获取到的数据显示在界面上。Handler:消息的发送者和处理者:消息队列,存储待处理的消息Looper。
2025-10-22 22:21:16
997
原创 MVC、MVP、MVVM的区别以及联系
MVC模式将程序分为三个部分:模型(Model)、视图(View)、控制器(ControllerModelViewControllerModelViewViewModelViewMVCControllerModelViewM——模型层(Model)负责处理数据的加载或者存储V——视图层(View)负责界面数据的展示,与用户进行交互C——控制器层(Controller)负责逻辑业务的处理:用户操作触发Controller,随后Controller调用Model处理数据,Model更新后通知View刷新。
2025-10-20 11:05:27
1059
原创 【Android】Room数据库的基本使用
Room是Android Jetpack组件库中的一部分,对SQLite进行了封装,简化了对SQLite数据库的操作,让开发者使用面向对象的方式(通过Java/Kotlin)来操作SQLite数据库,从而避免了编写大量繁琐的SQL代码和解析数据。
2025-09-21 22:12:35
1809
原创 【Android】Viewpager2实现无限轮播图
/ 图片资源数组@NonNull@Override@Override@Override其实Viewpager2的底层是基于RecyclerView实现的,所以用法基本上差不多,都是要自定义适配器和子项布局,在适配器中实现布局加载,控件的初始化和数据绑定等操作。i < count;i++) {i++) {方法名描述设置圆点半径设置圆点间距设置圆点切换动画,内置五种切换动画设置默认的圆点颜色设置选中的圆点颜色。
2025-09-14 20:49:17
1045
1
原创 【设计模式】单例模式
保证整个系统中一个类仅有一个对象实例,并提供一个可以访问它的全局访问点。为什么要设计单例模式?单例模式的优点体现在哪些方面?单例模式的设计保证了一个类在整个系统中同一时刻只有一个实例存在,主要被用于一个全局类的对象在多个地方被使用并且对象的状态是全局变化的场景下。同时,单例模式为系统资源的优化提供了很好的思路,频繁创建和销毁对象都会增加系统的资源消耗,而单例模式保障了整个系统只有一个对象能被使用,很好地节约了资源。
2025-09-14 20:44:51
1104
原创 【Android】创建自己的内容提供器
本文介绍了在Android中创建自定义内容提供器(ContentProvider)的方法。主要内容包括:1)通过继承ContentProvider类并实现6个核心方法(query、insert、update、delete、getType和onCreate)来构建内容提供器;2)详细说明了标准内容URI的组成结构,包括协议头、授权标识、路径和资源ID;3)讲解了MIME类型的规范格式;4)提供了完整的StudentProvider实现示例,展示了如何使用UriMatcher处理不同URI请求,以及如何与SQL
2025-08-02 18:10:17
341
原创 【Android】BottomNavigationView实现自定义底部导航栏
本文介绍了Android中BottomNavigationView控件的使用,通过该控件可以轻松实现自定义底部导航栏功能。文章详细说明了BottomNavigationView的常用属性配置,包括文字/图标颜色、大小、点击效果等,并给出了仿微信底部导航栏的实现示例。主要步骤包括:创建布局文件添加BottomNavigationView,定义menu资源文件设置导航项,配置图标资源文件,以及处理Fragment切换逻辑。该控件适合3-5个导航项的场景,能提供良好的用户体验。
2025-07-24 01:41:57
1520
1
原创 【Android】Material组件中MaterialButton的使用
摘要MaterialButton是Android Material Design组件中的按钮控件,相比原生Button功能更丰富。它支持文字和图标同时显示,并能精确控制间距和位置。通过属性配置可轻松实现圆角、描边、颜色等样式,避免为每种按钮创建单独drawable文件。文章介绍了MaterialButton的基本属性和使用步骤:1) 添加依赖库 2) 设置主题样式 3) 通过XML配置不同样式的按钮,如10dp圆角、20dp圆角和圆形按钮。MaterialButton简化了UI开发,提供了丰富的自定义选项
2025-07-19 17:39:52
1805
原创 【JAVA】创建线程到底有几种方式
Java创建线程方式解析Java创建线程主要有两种官方方式:继承Thread类和实现Runnable接口。本质上都是通过new Thread()创建线程对象并调用start()启动线程。Callable接口方式最终也需包装成Runnable交给Thread执行。线程池属于资源复用技术,不涉及新启线程。Thread类是对线程的抽象,start()方法才会真正启动操作系统线程,而run()方法仅包含业务逻辑,可单独调用。多次调用start()会抛出异常,但run()可重复执行。
2025-06-15 15:14:00
955
原创 【JAVA】Commons-IO的安装及使用
本文介绍了Apache Commons IO库的安装与使用方法。首先说明该库能简化Java I/O操作,解决原生API繁琐的问题。安装步骤包括:官网下载对应系统版本、解压获取核心jar包。在IDE中创建lib文件夹导入jar包,并通过"Add as Library"关联项目。最后以FileUtils.copyFile方法为例,演示了文件复制功能的使用效果。该库还包含FileUtils和IOUtils类提供的多种便捷方法,读者可自行探索其他功能。
2025-06-08 18:13:28
1988
1
原创 【JAVA】泛型中类型变量T和通配符?的区别详解
Java泛型中的类型变量T与通配符?有着本质区别:T用于定义泛型类/方法时作为类型占位符,需在实例化时指定具体类型;?则在使用泛型时表示未知类型。T支持类型限制(如extends),运行时擦除为上界类型;?仅在编译期存在,用于类型检查,分为上界(? extends)、下界(? super)和无界三种形式。二者的核心差异在于:T是定义时的类型参数,?是使用时的类型通配符,在类型擦除和适用场景上各有特点。
2025-06-02 16:14:27
1016
原创 【JAVA】深入理解Java迭代器:迭代器的底层原理及使用场景
Java迭代器是用于遍历容器元素的工具,通过Iterator接口提供hasNext()、next()和remove()方法实现顺序访问。迭代器内部通过指针移动实现遍历,而增强for循环是其语法糖,底层自动转换为迭代器操作。主要使用场景包括集合遍历、安全删除元素、自定义集合遍历等。迭代器模式解耦了遍历逻辑与集合实现,提供统一访问方式。remove()方法可安全删除当前元素,避免并发修改异常。增强for循环简化了迭代器使用,编译后仍基于迭代器实现。
2025-05-25 17:33:51
2456
1
原创 【JAVA】面向对象进阶 —— 多态中调用成员的特点
多态是面向对象编程中的关键特性,允许通过父类引用操作不同子类对象,并在运行时根据实际对象类型调用相应方法。多态的实现依赖于继承、方法重写和父类引用指向子类对象。在变量调用中,编译和运行都看左边,即访问父类变量;在方法调用中,编译看左边(检查父类方法),运行看右边(执行子类重写方法)。多态提高了代码的灵活性和可扩展性,使程序更易于维护和复用。
2025-05-18 17:22:00
2073
原创 【JAVA】字符串相关类的底层原理
在所有的编程语言中,字符串是应用最广泛的一种数据类型,它是由一系列字符(如字母、数字、符号)组成的一种数据类型。在Java中,字符串一旦创建就不能修改,每次操作都会产生一个新的字符串。那么这些特性背后的内存原理是怎样的?这就是我今天要分享的主题:字符串在java内存中的底层原理。
2025-05-11 17:33:37
1758
原创 【数据结构】探索哈希表:高效数据存储与检索的利器
哈希表是一种高效的数据存储与检索结构,通过哈希函数将关键字映射到数组的特定位置,实现快速查找。哈希函数的设计至关重要,常用的方法包括直接定址法、除留余数法和随机数法。然而,哈希冲突不可避免,即不同关键字映射到同一位置。解决冲突的方法有开放定址法(如线性探测法和二次探测法)等。线性探测法通过顺序查找空槽位,而二次探测法则以平方步长探测,减少聚集现象。哈希表通过优化存储和检索过程,显著提升了数据处理的效率。
2025-04-23 18:49:25
821
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅