- 博客(45)
- 资源 (4)
- 收藏
- 关注
原创 Android的view滑动冲突解决方案
Android滑动冲突处理方案 滑动冲突主要分为方向不一致、方向一致和组合嵌套三种类型。解决办法有两种: 外部拦截法(推荐) 父容器在onInterceptTouchEvent中处理 必须对ACTION_DOWN返回false 在ACTION_MOVE时根据条件判断是否拦截 内部拦截法 父容器默认拦截除ACTION_DOWN外的事件 子View通过requestDisallowInterceptTouchEvent请求控制权 适用于方向一致的冲突场景 建议优先采用外部拦截法,符合Android事件分发机制,
2025-11-14 00:43:55
764
原创 view的事件分发机制详解
Android事件分发机制通过三个核心方法实现:1) dispatchTouchEvent负责事件传递,ViewGroup会调用onInterceptTouchEvent判断是否拦截;2) onInterceptTouchEvent是ViewGroup特有方法,决定是否拦截事件;3) onTouchEvent处理事件消费。关键特性包括:事件序列连续性(从ACTION_DOWN开始)、ACTION_CANCEL通知拦截、处理优先级(OnTouchListener>onTouchEvent>OnCl
2025-11-14 00:40:07
516
原创 View的绘制流程详解
本文解析Android视图系统的核心机制,重点阐述View绘制流程与Window窗口的关系。关键点包括:1) Activity通过PhoneWindow管理DecorView这一根视图;2) ViewRootImpl作为核心引擎,连接应用视图与WMS系统服务;3) 绘制流程的三阶段测量(Measure)、布局(Layout)和绘制(Draw)由ViewRootImpl触发;4) WMS管理窗口生命周期,Surface作为绘图数据缓冲区;5) ViewRootImpl创建时机在Activity的onResum
2025-11-14 00:34:36
969
原创 Android的自定义view详解及Measurepec详解
自定义View的三大核心流程包括测量(Measure)、布局(Layout)和绘制(Draw)。测量阶段通过onMeasure方法确定视图尺寸,布局阶段通过onLayout确定位置,绘制阶段利用onDraw完成视觉呈现。关键要点:正确处理MeasureSpec测量模式(EXACTLY/AT_MOST/UNSPECIFIED),重写onMeasure时需考虑wrap_content情况并设置默认尺寸,在onDraw中应避免对象创建和考虑padding值。进阶技巧包括性能优化、自定义属性实现和触摸事件处理。掌握
2025-11-14 00:26:08
902
原创 Activity的启动详解
本文详细解析了Android Activity的启动流程,分为四个关键阶段:1)Launcher通过AMS发起启动请求;2)AMS检查并创建进程(通过Zygote);3)新进程初始化后反向绑定AMS;4)Activity实例化及生命周期回调。重点阐述了跨进程通信机制(Binder、Socket)、主线程消息循环处理流程,以及从类加载到界面显示的全过程。该流程展现了Android系统组件协同工作的核心机制,对开发者深入理解系统运行原理具有重要意义。
2025-11-14 00:15:39
776
原创 Android四大组件及Fragment基础
本文摘要:Android四大核心组件包括Activity(界面交互)、Service(后台任务)、BroadcastReceiver(事件监听)和ContentProvider(数据共享)。Activity生命周期复杂,与任务栈相关,需处理状态保存;Service分启动和绑定两种模式,生命周期不同;BroadcastReceiver有静态/动态注册方式,分普通广播和有序广播;ContentProvider提供标准化数据接口。Fragment具有独立生命周期,支持动态加载,通过FragmentManager管
2025-11-13 00:43:52
911
原创 Android常见的内存性能优化场景解决方案
《Android内存管理优化要点》摘要 内存管理是Android性能优化的核心。系统通过垃圾回收机制管理内存,但内存泄漏(无用对象堆积)、内存抖动(频繁GC)和溢出问题会引发卡顿甚至OOM。主要优化策略包括:切断无效引用链解决内存泄漏,对象池化避免内存抖动,以及合理处理大资源(如Bitmap)。高频场景需注意静态引用、监听器解绑和WebView释放。工具方面推荐使用Profiler分析堆转储,LeakCanary自动检测泄漏。同时建议优化布局层级、异步操作和启动流程,使用协程等现代工具提升整体性能。
2025-11-13 00:12:34
834
原创 Android 15 16特性总结
Android 15与16新特性对比及预测性返回导航适配指南 摘要:本文对比了Android 15和16在用户体验、隐私安全、性能电池和媒体功能等方面的关键特性升级。重点分析了Android 16新增的预测性返回导航功能,该功能通过OnBackInvokedCallback接口替代传统返回机制,实现可预览的流畅返回体验。开发者需注册回调、处理返回逻辑,并注意传统方法失效等变更。适配工作包括启用新回调、实现处理逻辑等步骤,同时提供代码示例和注意事项说明,帮助开发者顺利完成过渡。
2025-11-13 00:01:51
1165
原创 Android 插件化和组件化解决方案总结
摘要 Android开发中,插件化和组件化是两种核心架构思想。插件化侧重于动态加载未安装的APK,实现热更新和按需加载,通过DexClassLoader加载类、反射管理资源,以及Hook机制处理组件生命周期。组件化则关注编译时的模块解耦,通过Gradle配置实现模块隔离,采用路由框架进行跨模块通信,便于团队协作开发。两者虽都涉及应用拆分,但插件化关注运行时动态性,组件化强调开发时解耦与模块化。主流框架如RePlugin和ARouter分别代表了两者的典型实现方案。
2025-11-13 00:01:43
304
原创 ARouter组件的机制及原理总结
摘要: ARouter是Android组件化开发中的高效路由框架,通过编译时注解处理自动生成路由表(ARouter$$Group、ARouter$$Root类),实现模块间解耦。运行时动态加载路由信息至内存仓库Warehouse,支持分组懒加载。其跳转流程包括路径解析、拦截器链和自动参数注入(@Autowired),并额外提供服务发现、动态路由与降级策略等功能。相比传统Intent跳转,ARouter通过路径解耦、集中管理路由表,显著提升了灵活性与可维护性,支持跨模块方法调用和AOP拦截等高级特性。
2025-11-13 00:01:15
850
原创 Android的APK瘦身
本文系统介绍了Android应用APK瘦身的优化方法。核心技巧包括:资源优化(WebP图片转换、资源缩减)、代码优化(混淆压缩、动态库精简)、发布策略(使用AppBundle)和进阶手段(动态功能模块)。重点解析了R8编译器移除死代码、abiFilters指定CPU架构等原理,并提供了build.gradle配置示例。建议面试时分层阐述优化策略,结合工具使用和实际案例,强调瘦身对用户体验和分发效率的重要性。通过综合运用这些方法,可显著减小APK体积。
2025-11-12 01:17:49
422
原创 Android的内存泄漏场景及解决方案
内存泄漏是指无用的对象由于被错误的引用持有而无法被 GC 回收,导致内存占用不断增加,最终可能引发 OOM。
2025-11-12 01:09:00
766
原创 Android的动画详解
Android动画开发指南:本文系统介绍了Android三大动画类型。补间动画通过定义起止状态实现流畅效果,但仅改变视觉绘制位置;属性动画通过修改对象属性实现真实交互,功能强大但需API11+支持;帧动画通过快速切换图片实现简单效果但消耗内存。文章详细解析了各类动画的使用方法,并重点解答了补间动画点击事件不跟随视觉位置的原理问题,以及属性动画的工作机制和限制条件,为开发者选择合适动画方案提供了实用指导。
2025-11-12 01:04:34
921
原创 Kotlin面试题总结
Kotlin特性摘要:Kotlin的空安全机制通过可空类型区分(String?)和操作符(?.、?:、!!)在编译期强制处理空值。数据类自动生成标准方法,密封类限制继承结构。扩展函数允许为现有类添加新功能。作用域函数(let/run/apply等)根据引用方式(it/this)和返回值类型区分使用场景。协程提供轻量级异步编程方案(launch/async/withContext等),支持结构化并发。特性包括类型推断、Lambda表达式等,相比Java更简洁安全。
2025-11-12 00:55:08
823
原创 Android的anr分析
ANR(应用无响应)分析的核心在于理解主线程阻塞的原因。通过获取/data/anr日志或adbbugreport报告,重点检查主线程状态(RUNNABLE、BLOCKED等)、CPU使用率(iowait指标)和内存情况(OOME风险)。常见优化方案包括:将耗时操作移至子线程、解决锁竞争、平衡I/O负载以及优化内存管理。ANR分析需要结合线程状态、资源占用等多维数据定位性能瓶颈。
2025-11-11 00:25:47
669
原创 Android的MVP,MVVM,MVI架构模式的理解
本文对比了MVP、MVVM和MVI三种Android架构模式的核心特征。MVP通过接口实现视图与逻辑解耦,但存在模板代码多的问题;MVVM采用数据绑定自动更新UI,减少代码量但调试困难;MVI强调单向数据流和不可变状态,虽状态可控但学习成本高。文章指出演进关系为MVP→MVVM→MVI,解耦程度和状态管理严格性逐步提升,并建议根据项目复杂度选择:MVP适合简单项目,MVVM适用于主流应用开发,MVI则适用于状态复杂的界面。
2025-11-11 00:25:29
812
原创 LifeCycle的机制及原理
摘要:Android的Lifecycle组件通过观察者模式实现生命周期感知,核心包括LifecycleOwner(如Activity)、Lifecycle(状态管理)和LifecycleObserver(观察者)。低版本通过ReportFragment同步生命周期,高版本使用ActivityLifecycleCallbacks更高效捕获事件。LifecycleRegistry作为状态机,根据事件计算新状态并通知观察者,最终由LifecycleEventObserver处理状态变更,实现自动资源管理,避免内存
2025-11-11 00:25:11
644
原创 EventBus的机制及原理
EventBus是一个基于发布-订阅模式的事件总线框架,用于简化组件间通信。其核心包括事件、发布者和订阅者三个要素,以及注册/注销和发布事件两大操作。通过反射收集订阅者信息并建立映射表,EventBus可根据事件类型匹配订阅者,并支持多种线程模式的分发。此外,粘性事件机制确保新订阅者能获取最新状态。整个过程实现了低耦合的组件通信方式。
2025-11-11 00:24:49
634
原创 liveData机制及原理总结
LiveData是Android Jetpack的生命周期感知型数据容器,采用观察者模式实现UI层与数据的自动同步。其核心特性包括:通过版本控制确保数据时效性,线程安全的postValue机制,以及粘性事件处理。LiveData能避免内存泄漏(自动解除非活跃观察者)和无效更新(仅活跃状态回调),常与ViewModel配合实现配置无关的数据持久化。相比SharedFlow,它更专注于生命周期绑定的UI更新场景,同时支持通过Transformations进行数据转换。这种设计有效解决了Android开发中的异步
2025-11-11 00:24:31
331
原创 viewModel机制及原理总结
摘要:ViewModel是Android架构组件,用于管理UI相关数据,解决配置变更导致的数据丢失问题。它具有生命周期感知能力,与Activity/Fragment绑定但生命周期更长,通过ViewModelStore实现数据保留。ViewModel常与LiveData配合使用实现观察者模式,需注意避免持有Context引用。其优势包括生命周期安全、逻辑解耦、易于测试,并能与Jetpack其他组件高效协作。核心流程是通过ViewModelProvider获取实例,LiveData实现数据观察更新。
2025-11-10 20:27:29
361
原创 glide原理的理解
• 优化方向:针对低端机内存小的问题,可以通过自定义 AppGlideModule 来适当减小内存缓存的大小或调整 Bitmap 的默认解码格式(如使用 RGB_565)。当 Bitmap 不再使用时,并不会被立即回收,而是放入池中,新的图片加载可以复用池中已有的 Bitmap 内存,这极大地提升了列表滑动等场景下的流畅度。• 扩展性:Glide 的架构非常灵活,通过注册自定义的 ModelLoader, ResourceDecoder 等组件,可以轻松扩展以加载新的图片来源或支持新的图片格式。
2025-11-10 09:00:51
313
原创 RecycleView的理解及四层缓存机制
定义:RecyclerView是Android Jetpack中的一个高级滚动列表组件,用于高效地展示大量数据集。它的设计目标是解决ListView在性能和灵活性上的不足,通过视图回收机制来最小化内存占用并保证滚动的流畅性。它的强大之处在于其高度解耦的插件化架构,主要依赖于四个核心组件协同工作:Adapter:负责将数据集合中的每个数据项转换为可视化的视图项(ItemView)。它创建ViewHolder并完成数据绑定。ViewHolder:作为Adapter的内部类,用于缓存ItemView内部子视图的引
2025-11-10 00:40:51
676
原创 Okhttp原理总结
OkHttp是一个高效的HTTP客户端框架,其核心设计包含OkHttpClient、Dispatcher、拦截器链和连接池四大部分。框架通过同步/异步请求调度机制处理网络调用,其中拦截器责任链(包括5个核心拦截器)是核心处理流程,实现请求的逐步加工。关键技术包括连接复用机制(通过ConnectionPool减少TCP/TLS握手开销)和多种设计模式应用(责任链、建造者、门面模式)。这些设计使OkHttp具备高性能、可靠性和可扩展性,能有效降低延迟、节省带宽。
2025-11-10 00:31:18
587
原创 Android的binder机制理解
Binder是Android系统基于C/S架构的高效IPC机制。Binder驱动作为通信中枢,ServiceManager管理服务注册与查询,Server提供服务实现,Client发起请求。其核心机制包括:一次拷贝提升性能,UID/PID验证保障安全,线程池优化并发处理。AIDL作为开发接口,自动生成通信代码。实际应用中需注意数据大小限制,可通过死亡通知机制增强健壮性,使用oneway实现异步调用。Binder通过mmap等技术实现了高效安全的跨进程通信,是Android系统的基石之一。
2025-11-10 00:01:01
776
原创 handler机制原理面试总结
Handler是 Android 中用于线程间通信的一种机制,主要用于解决的问题。因为 Android 规定 UI 操作必须在主线程(UI 线程)中进行,而耗时操作(如网络请求、文件读写)应在子线程执行。Handler提供了一种安全的方式让子线程将消息或任务发送到主线程去执行,从而更新 UI。
2025-11-09 23:24:35
1137
原创 Android高级实践分享
以下是我学习过程中,觉得比较好的Android进阶高级实践,分享给大家,可能有些东西差异化比较大了,但是我也想经过这些实践,踩踩坑。
2023-11-12 21:36:36
315
原创 自定义实现图片裁剪
/ 裁剪区域,例如:new RectF(100, 100, 300, 300)要实现这个功能,首先需要创建一个自定义的View,然后在该View中绘制背景框和裁剪后的图片。这样,你就可以在自定义View中显示裁剪后的图片了。// 从资源或其他来源获取原始图片。// 对原始图片进行裁剪得到的图片。(内容由讯飞星火AI生成)
2023-10-30 23:44:19
336
原创 Glide原理
相比其他几种图片加载框架,Glide性能最好。这得益于其高效的图片缓存策略其还有多样化的媒体格式加载:如GIF、Video,对于商城首页需展示丰富样式、信息的页面需求来说,也是必不可少的。
2023-10-27 17:37:31
921
原创 软件设计模式-中介者模式(仲裁者模式)总结
类图目的“定义一个封装-系列对象交互的对象。Mediator通过防止对象间显示地相互引用来促使松耦合,且可以独立地改变他们之间的交互。"[GoF]要解决的问题如何避免一组交互对象之间的紧密耦合?如何独立改变一组对象之间的相互作用?解决方案定义一个单独的Mediator对象,该对象封装一组对象之间的交互方式。对象与Mediator对象交互,而不是彼此直接交互。动机紧耦合的colleague。一组colleague通过互相引用和知道彼此而直接进行交互(紧耦合)紧耦合的
2020-05-21 08:18:17
529
原创 软件设计模式-外观模式总结
目的为子系统的一组接口提供统一的接口。Façade定义了使子系统更易于使用的更高级别的接口。要解决的问题复杂的软件系统通常被构造(分层)成子系统复杂子系统的客户端引用并了解(取决于)许多不同的对象(具有不同的接口),这使得客户端与子系统紧密耦合,紧密耦合的对象很难实现,更改,测试和重用。因为它们依赖许多不同的对象如果我们要最小化对子系统的依赖性,则避免这种方法复杂的子系统应...
2020-05-03 20:21:40
611
原创 软件设计模式-装饰器模式总结
装饰模式:目的动态地将额外的责任附加到对象上。装饰器提供了一个灵活的子类扩展功能的替代方法。要解决的问题子类化是在编译时静态扩展类功能(向类添加职责)的标准方法。实例化子类后,该功能将在其生命周期绑定到该实例,并且无法在运行时进行更改。如果我们想在运行时扩展对象的功能,而不是在编译时扩展类的功能,则可以避免这种方法。解决方案定义单独的Decorator对象:定义一个...
2020-05-02 17:17:39
446
原创 软件设计模式-职责链模式总结
目的通过给多个对象处理请求的机会,避免将请求的发送方与其接收方耦合。将接收对象串联起来,将请求沿链传递,直到有对象处理请求为止要解决的问题如何避免将请求的发送方耦合到其接收方 多个对象如何处理请求解决方案(1)这使得请求的发送者与其接收者之间的松散耦合成为可能(2)发送者请求的对象不了解最终将处理该请求的对象(接收者)。可以在运行时动态指定对象(3)链Handler(Hand...
2020-05-02 17:10:11
393
原创 软件设计模式-Singleton设计模式解决方案
Singleton设计模式描述了什么解决方案:1.让类自身负责其只能实例化一次。2.定义一个公共静态操作以提供该类的唯一实例。3.定义一个静态操作以提供类的唯一实例。子类不能重新定义静态操作。4.将类的构造函数设为私有,这样就永远不能从类外部实例化该类。...
2020-04-30 10:28:50
215
原创 软件设计模式-Singleton设计模式解决的问题
Singleton设计模式解决了什么问题:1.如何确保一个类只有一个实例?2.如何确保一个类只有两个实例?3.如何限制一个类的实例数4.一个类控制(并负责)如何实例化它5.如何避免创建大量不必要的对象...
2020-04-30 10:16:09
191
原创 操作系统-进程状态变迁分析
某系统的进程状态变迁图如图2-32 所示,请说明:(1)引起各种状态变迁的典型事件有哪些?(2)当我们观察系统中某些进程时,发现某一进程产生的一次状态变迁能引起另一进程作一次状态变迁。在什么情况下,当一个进程发生变迁3 时能否立即引起另一个进程发生变迁1?(3)试说明是否会发生下述因果变迁:2 → 13 → 24 → 1答案:(1)存在4种状态变迁:...
2020-04-30 09:04:47
10578
2
原创 操作系统-优先级进程调度
在采用优先级进程调度时,运行进程是否一定是系统中优先级最高的进程?为什么?不一定。因为高优先级的进程有可能正处在阻塞队列中,进程调度就从就绪队列中选一个进程占用CPU,这个被选中的进程可能优先级较低。...
2020-04-30 08:59:28
3174
原创 操作系统-系统中既没有运行进程,也没有就绪进程,系统中是否就没有进程
若系统中既没有运行进程,也没有就绪进程,系统中是否就没有进程?为什么?不一定。因为系统中的所有进程可能都处于阻塞状态。
2020-04-30 08:56:54
7011
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅