- 博客(171)
- 收藏
- 关注
原创 Android MQTT 长连接最佳实践技术分享
Android 8.0+系统下MQTT长连接实现方案 摘要:针对Android 8.0+系统对后台服务的严格限制,本文提出四种MQTT长连接解决方案:普通后台服务(简单但不稳定)、前台服务(稳定但影响体验)、后台服务+推送通知(推荐方案)以及纯推送服务。重点推荐的后台服务+推送方案通过智能重连策略(指数退避算法)、网络状态监听和推送通知兜底机制,在保证连接稳定性的同时优化用户体验。该方案采用START_STICKY服务生命周期管理,结合网络质量评估调整重连策略,并通过Firebase等推送服务确保消息可靠到
2025-07-27 17:13:42
470
原创 Android网络框架封装 ---> Retrofit + OkHttp + 协程 + LiveData + 断点续传 + 多线程下载 + 进度框交互
多服务器架构(API、CDN、上传、下载服务分离)大文件下载/上传需要断点续传用户体验要求高(进度可视化、操作可控)代码可维护性和扩展性要求// 主API服务// CDN服务// 上传服务@Multipart@Multipart// 下载服务@Streaming@GET@HEAD= null= null= nullinit {// 设置对话框属性// 设置窗口属性window?
2025-07-27 11:14:48
1079
原创 WorkManager vs Flow 适用场景分析
需要保证任务最终执行任务需要在应用不可见时执行需要系统级约束条件周期性任务应用被杀死后仍需执行的任务实时数据流处理UI 状态管理用户交互响应数据处理管道需要取消和重新订阅的场景在同一个项目中,WorkManager 和 Flow 可以结合使用WorkManager 负责后台任务调度Flow 负责实时数据流和 UI 状态管理根据具体需求选择最合适的方案这样选择可以确保应用的稳定性和用户体验!
2025-07-26 17:43:54
712
原创 WorkManager 替代 Service 详解
Android后台任务管理从Service迁移到WorkManager的实践总结 传统Service存在诸多局限性:手动处理后台任务、无法保证执行、需应对系统限制(如Doze模式/电池优化)、任务丢失风险高。WorkManager则提供了更优解决方案:自动处理系统限制、支持任务约束条件(网络/充电状态)、内置重试机制、保证任务最终执行。 迁移策略包括:1)识别Service类型(后台/前台/IntentService)2)创建对应Worker类 3)替换启动方式。实际案例展示文件下载和数据同步任务的迁移过程
2025-07-26 17:30:15
538
原创 Android Jetpack 组件库 ->WorkManager
WorkManager是Android官方推荐的后台任务调度框架,解决了传统方式手动管理后台任务的诸多问题。它通过声明式任务调度,自动处理系统限制(如Doze模式、电池优化),保证任务最终执行,并支持约束条件、自动重试和链式任务。核心组件包括WorkManager(调度器)、WorkRequest(任务请求)、Worker(执行者)和WorkInfo(任务状态)。WorkManager支持一次性任务、周期性任务和链式任务,开发者可通过设置约束条件、输入输出数据等实现灵活控制。相比传统方案,WorkManag
2025-07-26 17:26:45
862
原创 Android Jetpack 组件库 ->Jetpack Navigation (下)
传统导航的问题:kotlinApply// 传统方式 - 手动管理 Fragment) {// 手动添加 Fragment.commit()// 手动处理导航逻辑.commit()代码重复且容易出错难以管理返回栈参数传递不安全难以处理深层链接测试困难Jetpack Navigation 组件极大简化了 Android 应用的导航开发,提升了代码的可维护性和安全性。
2025-07-26 16:21:32
877
原创 Android 键盘
本文介绍了Android开发中物理键盘与软键盘的区别及处理方法。物理键盘指实体键盘,输入响应快且支持快捷键;软键盘是虚拟键盘,功能丰富但占用屏幕空间。系统默认在有物理键盘时隐藏软键盘,但开发者可通过Configuration和InputDevice检测键盘状态,使用InputMethodManager控制软键盘显示/隐藏。文中提供了键盘状态检测、软键盘控制、USB设备监听等完整代码实现,帮助开发者根据设备状态自动切换键盘输入方式,优化用户体验。关键点包括键盘类型判断、广播监听配置变化以及高级的USB设备连接
2025-07-26 16:10:55
780
原创 杂谈-----感悟
技术价值的精髓——「术」是撬动财富的杠杆,而「力」仅是基础支撑。这一规律在苏州智能制造与系统开发领域尤为显著。注:宝时得累计专利8300+件,其中高价值专利(如无刷电机抗干扰算法)年创收可达千万级——这正是「术」的资本价值体现。数据印证:2023年苏州技术交易额突破800亿,嵌入式技术交易增长35%——「术」的创富时代已然来临。案例:东成电动工具BMS系统。🔍 苏州企业的技术创富之道。"财富在于术,不在力。⚙️ 技术溢价的三重境界。案例:宝时得智能割草机。案例:润芯微车机平台。🚀 技术创富进阶路线。
2025-07-24 10:43:10
641
原创 Android系统5层架构
Android系统采用5层架构设计:应用层(用户应用)、应用框架层(开发API)、系统运行库层(核心库/运行时)、硬件抽象层(统一硬件接口)和Linux内核层(基础功能)。这种分层设计实现了模块化、安全隔离和硬件兼容,既方便开发维护,又能适配不同硬件平台。各层通过标准接口衔接,使系统具备良好的可扩展性和跨平台能力。
2025-07-20 22:20:31
473
原创 kotlin 扩展函数 在链式调用的妙用
Kotlin扩展函数configure通过带接收者的函数类型实现优雅配置模式。该方法接收一个EventConfig类的扩展函数作为参数,通过apply在新对象上执行配置代码块,使配置过程更直观。相比传统方式,这种设计支持链式调用,将配置逻辑封装在EventConfig作用域内,可直接访问其属性和方法。典型应用场景包括事件处理器配置,通过addValidator和addHandler等函数实现验证逻辑和事件绑定,最终返回配置管理器以支持后续操作。该模式结合建造者模式和扩展函数特性,显著提升代码可读性和维护性。
2025-07-20 09:35:07
577
1
原创 注解(Annotation)
/ 注解就是给代码贴标签,提供额外信息@Deprecated("这个方法已经过时了")// 旧代码// 注解的作用:// 1. 编译时检查:告诉编译器一些信息// 2. 运行时处理:在程序运行时可以读取注解信息// 3. 代码生成:可以自动生成一些代码// 4. 配置信息:替代XML配置文件// 系统注解(内置处理函数)@Override // 编译器自动检查重写@Deprecated // 编译器+IDE自动显示警告@Suppress // 编译器自动抑制警告。
2025-07-14 14:17:05
372
原创 ServiceLibrary 注解增强版 - 完整方案
本文介绍了基于注解的ServiceLibrary系统设计方案,包含核心注解定义、使用示例和处理系统。系统通过@Service、@Route、@Module等注解实现服务、路由和模块的自动注册,配套的处理器完成扫描和注册工作。在Application中统一初始化后,即可通过简洁的方式使用服务。相比传统手动注册方式,注解方案具有代码简洁、维护性好、扩展性强等优势,实现了声明式编程和自动化管理,提升了系统的模块化和可维护性。
2025-07-14 13:45:19
91
原创 ServiceLibrary 库使用演示
kotlin// 传统方式:模块间直接依赖// 直接依赖具体Activity,编译时耦合// 问题:// 1. 模块间编译时耦合// 2. 难以进行单元测试// 3. 多应用构建困难// 4. 团队协作冲突kotlin// 1. 模块解耦// 传统:LoginActivity → UserActivity (编译时依赖)// 现在:LoginActivity → UserService → UserActivity (运行时解耦)// 2. 统一管理。
2025-07-14 13:29:24
461
原创 手写路由库 (下)(类似ARouter或VMRouter)
将“依赖注入+服务定位器+自定义路由”模式封装为通用库,帮助多模块/多应用Android项目实现模块解耦、灵活服务管理和页面跳转统一化。
2025-07-14 11:53:44
115
原创 手写路由库 (上)(类似ARouter或VMRouter)
kotlin// 如果库的页面跳转逻辑相对固定// 库内部处理跳转逻辑结论:不需要路由,在库内部处理即可kotlin// 如果库需要支持使用方自定义页面// 通过路由获取目标页面结论:需要路由,让使用方可以自定义页面。
2025-07-14 11:49:19
1211
原创 Android 自定义路由系统
本文介绍了一个轻量级Android组件化路由方案,采用模块化设计实现各组件独立路由管理。系统核心包括:路由接口(IRouter)、路由实现(Router)、路由拦截器(RouteInterceptor)和回调机制(RouteCallback),通过反射机制实现Activity跳转。项目结构采用主app模块+公共库(lib_common)+功能模块(mod_home/mod_user/mod_product)的方式,各模块自行注册路由路径。方案优势在于实现简单、性能优异、模块解耦,支持参数传递和拦截器机制,适
2025-07-14 11:36:49
625
原创 Android模块化架构:基于依赖注入和服务定位器的解耦方案
本文提出了一种基于服务定位器模式的模块化解耦架构方案。该方案通过接口隔离、服务定位和依赖注入三大机制,有效解决了多应用构建中的模块依赖、服务共享等挑战。核心组件包括全局服务定位器、基础服务接口层和模块化注册机制,实现了编译时解耦和运行时绑定。相比传统DI框架,该方案具有学习成本低、调试简单等优势;相比路由框架,则提供了更完整的业务逻辑处理能力。实践表明,该架构在多应用支持、模块独立开发和渐进式迁移等方面表现优异,特别适合大型模块化项目和多应用构建场景,是平衡简洁性与解耦性的优秀实践。
2025-07-14 11:02:35
1220
原创 Android事件分发机制完整总结
Android事件分发机制采用责任链模式,事件从Activity开始依次传递。dispatchTouchEvent是唯一入口,onInterceptTouchEvent(仅ViewGroup)和onTouchEvent是其内部调用方法。默认行为建议不重写dispatchTouchEvent,只通过onInterceptTouchEvent控制拦截逻辑(如ScrollView和ViewPager的滑动拦截),这种方式维护成本低且可靠。自定义行为需重写dispatchTouchEvent手动处理所有逻辑,适用于
2025-07-13 23:04:17
832
原创 Android自定义View的事件分发流程
Override// 手指按下// 返回true表示消费事件// 手指移动// 手指抬起// 记录起始位置// 计算移动距离// 执行相应的操作// 完成操作@Override// 记录初始触摸点break;// 计算移动距离// 如果水平移动距离大于阈值,拦截事件// 拦截事件,自己处理break;@Override// 处理滑动逻辑// 处理释放逻辑。
2025-07-13 23:03:15
321
原创 Android 响应式编程完整指南:StateFlow、SharedFlow、LiveData 详解
LiveData → StateFlow:状态管理现代化MutableLiveData → StateFlow:数据流现代化Event Bus → SharedFlow:事件处理现代化。
2025-07-13 16:13:36
631
原创 flow{} 和 callbackFlow{} 的区别
❌ 只能在协程中使用 emit()❌ 不能处理异步回调❌ 不能等待外部事件flow{}:用于挂起函数和协程操作callbackFlow{}:用于回调函数和异步事件。
2025-07-13 16:05:32
805
原创 协程的 callbackFlow 函数的使用和原理
转换:将回调 API 转换为 Flow简化:简化异步代码统一:统一异步处理方式管理:更好的生命周期管理。
2025-07-13 16:01:13
708
原创 OkHttp SSE 完整总结(最终版)
SSE(Server-Sent Events)是一种基于HTTP的服务器推送技术,支持单向实时通信。OkHttp实现SSE有三种方式:1)使用OkHttp-SSE标准库,自动处理SSE协议和重连;2)自定义SSE客户端(推荐Kotlin项目),通过Flow实现灵活的事件管理和扩展;3)手动处理HTTP流,适合极简或特殊业务场景。相比WebSocket和轮询,SSE在单向推送场景中具有低复杂度、高实时性优势。最佳实践建议:标准推送用SSE库,Kotlin项目采用自定义客户端,特殊需求可手动处理。三种方式各有适
2025-07-13 12:20:08
603
原创 装饰器模式和建造者模式的使用场景和区别
特性建造者模式装饰器模式类型创建型模式结构型模式目的创建复杂对象动态扩展功能时机对象创建时对象创建后关注点对象构建过程对象功能扩展建造者模式专注于对象创建,提供流畅的API和参数验证装饰器模式专注于功能扩展,提供动态的功能组合能力两者解决不同的问题,可以单独使用或结合使用选择哪种模式取决于具体的使用场景和需求。
2025-07-12 17:36:23
303
原创 装饰器模式(Decorator Pattern)
装饰器模式是一种动态扩展对象功能的结构型设计模式。它通过包装对象在不修改原结构的前提下添加新功能,保持接口一致性。该模式包含抽象组件、具体组件、抽象装饰器和具体装饰器等核心元素,典型应用场景包括Java IO流处理和GUI组件扩展。相比继承,装饰器模式更加灵活,能避免子类爆炸问题,支持运行时功能组合。其优势在于遵守开闭原则、实现单一职责和透明扩展,但需注意避免过度使用导致的类膨胀和调试困难。该模式特别适用于需要动态添加职责、组合多种功能的场景。
2025-07-12 17:33:21
422
原创 建造者模式(Builder)
Builder模式是一种创建型设计模式,用于分步构建复杂对象。它通过分离对象构建和表示,提供流畅的API接口,支持链式调用,确保对象创建的一致性和完整性。该模式包含产品类、抽象建造者、具体建造者和指挥者四个核心组件,现代Java更常用链式调用的实现方式。Builder模式的优势包括参数可选性、顺序无关性、不可变性、可读性和类型安全,特别适用于创建具有多个可选参数的复杂对象、需要参数验证的场景以及配置对象的创建。相比Factory模式,Builder更关注复杂对象的逐步构建过程。
2025-07-12 17:20:55
413
原创 实现Service和UI通信,并且能够手动回收的解决方案——共享ViewModel
摘要:本文介绍了一个完整的Android共享ViewModel实现方案,用于Service与Activity间的数据通信。通过创建共享ViewModel、ViewModelStoreOwner管理器,并在Application中统一管理生命周期,实现了:1) Service向多个Activity发送数据;2) 响应式LiveData通信;3) 手动/自动内存回收机制;4) 防止内存泄漏。方案包含ViewModel创建、数据更新、状态观察、UI绑定等完整实现代码,适用于需要持久化数据状态或服务-UI通信的场景
2025-07-12 15:30:47
750
原创 Kotlin 常用语法糖完整整理
Kotlin语法糖精要整理:涵盖属性访问、空安全操作、字符串模板等21项核心特性,包括数据类、扩展函数、协程、委托属性等实用功能。重点突出了空安全机制、函数式集合操作、智能类型转换等特色语法,并提供了链式操作、默认参数、解构声明等简化代码的技巧。这些语法糖使Kotlin代码更简洁安全,特别适合Android开发和现代应用构建,建议开发者合理运用以提升开发效率和代码质量。
2025-07-11 10:41:51
638
原创 kotlin语法糖 BitMap创建
如果第三个参数不是 Bitmap.Config.ARGB_8888,则会使用其他的 Bitmap.Config 配置来创建位图。Bitmap.Config.HARDWARE 需要 API 级别 26 或更高。使用 Bitmap.Config.RGB_565 时,透明度会被忽略。这就等于直接用内联函数给你封装了。
2025-07-11 10:05:15
362
原创 Canvas 状态管理 语法糖 canvas.withSave() {}
canvas.withSave() 是一个扩展函数,它内部会调用 canvas.save() 和 canvas.restore(),确保 Canvas 状态在闭包结束后自动恢复。
2025-07-10 22:56:29
158
原创 Android View 绘制流程 优化 (Bitmap 复用+内容变化检测+防抖调度策略)
《缩略图生成性能优化方案》 摘要:本文针对Android视图组件中的缩略图生成功能进行了三项关键优化。首先实现Bitmap和Canvas的复用机制,通过缓存Bitmap对象和尺寸检测避免了频繁的内存分配;其次引入内容哈希检测,通过计算矩形属性哈希值比对,仅在内容真正变化时触发生成;最后采用防抖调度策略,通过200ms延迟机制和操作结束检测,有效降低生成频率。这三项优化共同作用,显著减少了内存分配和GC压力,提升了响应速度,同时确保用户体验不受影响。优化方案还包括完善的资源清理机制,在视图销毁时及时释放Bit
2025-07-10 11:46:42
412
原创 Android View 绘制流程 简述 (无限递归+BitMap问题)
Android View系统中的draw(canvas)和dispatchDraw(canvas)方法共同完成视图绘制流程。draw(canvas)负责绘制背景、内容、子视图(通过dispatchDraw)和前景;dispatchDraw(canvas)专门处理子视图绘制。若在dispatchDraw中调用draw方法会导致无限递归,如生成缩略图时直接调用draw。正确做法是绕过View的draw方法,直接操作Canvas进行绘制。理解这两个方法的调用关系及职责划分,才能避免递归问题并确保正确的绘制顺序。
2025-07-09 15:22:11
775
原创 c++ 的标准库 --- std::
在 C++ 的标准库(std)里,除了 std::string,还有很多常用的类型和工具。// 字符串到整数的映射。
2025-07-03 22:51:06
492
原创 JNI实现Android音视频播放器的设计方案
为例,详细讲解一下“Java层调用C++解码,解码完后C++回调Java刷新画面”这个流程。JNI-->>Java: 回调onFrameDecoded(byte[] data)Java->>JNI: 调用native方法startDecode()participant Java as Java层。Java->>Java: 刷新画面/播放音频。JNI->>Cpp: C++开始解码音视频。Java->>JNI: 继续请求下一帧。Cpp-->>JNI: 解码一帧完成。// C++解码完后回调。
2025-07-03 22:49:31
403
原创 重新认识JNIEnv
JNIEnv是一个指向结构体的指针,包含了 JNI 函数的指针表。通过这个指针,开发者可以调用 JNI 提供的各种功能,如创建对象、调用方法、访问字段等。JNIEnv 实际上是一个指向结构体的指针(在 C 里是 JNIEnv*),它代表了本地线程(c/C++创建的线程)与 JVM 之间的接口。通过 JNIEnv*,本地代码可以调用大量 JNI 提供的函数(比如访问 Java 对象、调用 Java 方法、抛出异常等)。每个线程都有自己独立的 JNIEnv*,不能跨线程使用。
2025-07-03 22:47:24
859
原创 JNI 理解--知识点细节讲解
JNIEnv *env 是 JNI 提供的“桥梁”,让 C/C++ 代码可以操作 Java 世界。每个本地线程都有自己的 JNIEnv 指针,不能跨线程使用。env 是 JNI 环境指针,JVM 传给你的。你用 *env 来调用 JNI 的各种函数,实现 C/C++ 和 Java 的交互。env 是一级指针(JNIEnv *),不是二级指针(JNIEnv **)。之所以用 (*env)->xxx,是因为 JNIEnv 其实是一个包含函数指针的结构体指针,这样写可以兼容所有平台。
2025-07-02 23:33:49
691
原创 Compose Canvas 中添加手势控制
本文详细介绍了如何在Jetpack Compose中利用Canvas和手势控制创建交互式绘图应用。主要内容包括:1)基础手势集成,通过detectDragGestures、detectTransformGestures实现拖拽、缩放和旋转;2)复杂交互实现,如拖拽绘制对象和视图变换;3)手势控制绘图应用开发,包括路径绘制和状态管理;4)手势控制图表交互的实现方法;5)高级技巧包括手势冲突解决、性能优化和形状识别。文章强调通过mutableStateOf管理状态,使用drawWithCache优化性能,并演示
2025-06-15 12:03:25
333
Android MQTT 客户端库,支持长连接、自动重连、后台服务等特性
2025-07-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人