Android
文章平均质量分 81
Android development articles
Tom4i
智能座舱系统应用开发
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【内存优化】使用 Android Studio Profiler 分析 .hprof 文件
本文详细介绍了使用Android Studio Profiler分析.hprof堆转储文件的完整流程。主要内容包括:准备工作确认文件来源,通过菜单栏或Profiler导入文件,重点分析泄漏类的实例详情和引用链,理解GC Roots类型,以及MAT的高级技巧如对比文件和OQL查询。文章还提供了与LeakCanary报告的对照方法、常见问题解决方案,并总结出标准的分析流程图。通过这套方法,开发者可以精准定位内存泄漏问题,特别是由静态字段或后台任务导致的Context泄漏。原创 2025-12-16 17:04:19 · 1168 阅读 · 0 评论 -
基于 Launcher3 的 iOS 风格桌面 04 拖拽和移位
摘要:本文介绍了桌面应用图标删除移位和拖拽移位的实现方案。删除移位通过修改removeItemsByMatcher方法实现后方应用前移;拖拽移位包括页面内拖拽和跨页拖拽,分别通过rearrangeChildren方法处理应用前移/后移逻辑,以及onAlarm方法处理跨页拖拽时自动准备空位。关键点在于计算目标位置索引、确定移动方向,并为拖动视图准备新的单元格位置。原创 2025-10-28 16:38:32 · 430 阅读 · 0 评论 -
Android 系统中的 App 启动流程
Android应用启动流程涉及三大核心服务协同工作:AMS负责接收启动请求并管理进程生命周期,PMS解析Intent并校验权限,WMS处理窗口创建与显示。首先Launcher通过Binder向AMS发起请求,AMS调用PMS解析目标Activity信息并检查权限。若进程不存在,AMS通过Zygote创建新进程,初始化ActivityThread主线程环境。原创 2025-10-23 15:02:21 · 1111 阅读 · 0 评论 -
Android 系统的进程模型
Android进程模型基于Linux进程但受AMS管控,核心是通过动态调整进程优先级(oom_adj)实现资源管理。进程优先级由最活跃组件决定,从高到低分为前台、可见、服务、后台和空进程。AMS结合LMK机制按优先级回收进程,优先保留交互进程。特殊进程如Persistent进程具有高存活优先级。该设计通过组件绑定进程、动态优先级调整和智能回收机制,在有限内存下平衡性能与用户体验。原创 2025-10-21 20:33:00 · 790 阅读 · 0 评论 -
Android 系统中进程间通信方式
方式底层原理优点缺点典型场景Binder内核驱动+内存映射效率高(1次拷贝),支持双向通信实现较复杂(需AIDL)跨进程服务调用(AIDL、Messenger)SocketTCP/UDP 协议通用,支持跨设备效率低,需处理网络问题跨设备通信、文件传输文件共享磁盘文件简单,适合静态数据实时性差,有并发问题配置信息共享Binder适合结构化数据,支持权限控制仅支持基本数据操作(增删改查)联系人、媒体库等数据共享广播Binder(AMS 分发)简单,一对多通信。原创 2025-10-20 16:57:39 · 489 阅读 · 0 评论 -
Android 系统中的事件分发机制
Android点击事件传递机制采用双向流程:首先从父View到子View(捕获阶段),再从子View到父View(冒泡阶段)。核心通过dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()三个方法实现。事件从Activity开始,依次经过ViewGroup判断是否拦截,最终由消费事件的View处理完整事件序列。原创 2025-10-20 13:58:50 · 973 阅读 · 0 评论 -
Android 中 invalidate 和 requestLayout 的区别
若只需更新 View 的显示内容(如颜色、文本),用(性能更优)。若 View 的尺寸、位置发生了变化,用(会自动处理必要的重绘)。错误使用可能导致问题:例如,修改了 View 尺寸却只调用,会导致布局不更新,显示异常;反之,仅修改颜色却调用,会造成不必要的性能浪费。原创 2025-10-20 13:31:57 · 438 阅读 · 0 评论 -
Android 自定义 View 如何设置默认尺寸
本文介绍了在 Android 自定义 View 中设置默认宽度和高度的方法。核心是在 onMeasure() 方法中处理测量逻辑,根据 MeasureSpec 模式决定使用默认值还是父容器约束。具体步骤包括:1) 在构造方法中定义默认宽高并进行单位转换;2) 重写 onMeasure(),针对不同测量模式(EXACTLY、AT_MOST、UNSPECIFIED)计算最终尺寸。关键点在于正确处理 wrap_content 情况并使用默认值,同时兼容 match_parent 和具体尺寸设置。原创 2025-10-20 13:05:54 · 269 阅读 · 0 评论 -
AIDL 接口中的 in、out、inout、oneway 关键字
/ 1. in + oneway:异步传递输入参数(调用方发指令,不等待结果)// 2. out + 同步:同步获取服务端输出结果(调用方等待服务端填充数据)// 3. inout + 同步:同步双向交互(调用方传初始配置,服务端更新后返回)原创 2025-09-18 20:49:29 · 510 阅读 · 0 评论 -
Android 中 ViewGroup 的 clipToPadding 和 clipChildren 属性
clipToPadding和clipChildren是Android中控制视图裁剪行为的两个重要属性。clipToPadding决定子视图是否被父容器的padding区域裁剪,默认true会裁剪,false则允许延伸到padding区,常用于实现滚动列表的自然过渡效果。clipChildren控制子视图是否被自身边界裁剪,默认true限制在布局范围内,false允许超出边界显示。两者常配合使用:clipChildren处理子视图自身溢出,clipToPadding处理父容器padding区的显示。原创 2025-09-15 11:19:24 · 912 阅读 · 0 评论 -
Launcher3 新应用添加到主屏幕时,如何避免自动跳转到新应用页面
在 Android 系统的 Launcher3 启动器中,当新应用被安装并添加到主屏幕时,默认行为通常是自动跳转到新应用所在的页面,以便用户立即看到新安装的应用。然而,在某些定制化场景下,我们可能需要禁用这一自动跳转行为,让用户保持在当前页面。原创 2025-09-12 10:16:17 · 345 阅读 · 0 评论 -
Android 使用使用 flow 来实现一次性事件的最佳实践
本文介绍了在Android开发中处理一次性事件(如按钮点击、条目删除等)的最佳实践方案。一次性事件与StateFlow不同,它们不需要缓存且触发后应仅消费一次。文章按照安全性和易用性排序,推荐了三种主要方法: Channel方案(官方推荐): 使用Kotlin的Channel组件实现一对一事件发送/接收 无缓存特性可避免页面重建后重复执行 需配合repeatOnLifecycle实现生命周期安全 EventWrapper封装方案: 通过包装类标记事件消费状态 适合已使用StateFlow但需处理一次性事件的原创 2025-09-09 16:32:22 · 1102 阅读 · 0 评论 -
Android Activity 中收集 StateFlow 的最佳实践
本文介绍了在Android Activity中安全收集StateFlow的最佳实践,重点包括:1)使用lifecycleScope和repeatOnLifecycle实现生命周期感知的收集;2)合理选择collect或collectLatest运算符;3)自动线程切换机制;4)与ViewModel的配合使用。文章提供了完整代码示例,强调在正确生命周期阶段收集数据、避免内存泄漏和资源浪费,并对比了StateFlow与LiveData的适用场景。这些实践能确保UI数据流的高效管理和性能优化。原创 2025-09-03 19:31:14 · 467 阅读 · 0 评论 -
Android 系统应用如何监听系统热点AP的开关状态
摘要:Android系统级应用可通过高权限方式监听热点状态变化。主要方法包括:1) 使用WifiManager结合广播监听;2) 在API 26+通过registerDefaultNetworkCallback间接判断。实现需要系统签名和CONFIGURE_WIFI权限,能获取热点SSID、密码等详细信息。该方法适用于定制ROM或设备管理应用,普通应用因权限限制无法实现。关键点包括热点状态枚举值、自启动设置及系统级API调用限制。原创 2025-09-03 16:10:24 · 384 阅读 · 0 评论 -
使用 Binder 机制监听进程死亡
Android Binder进程死亡监听机制 Binder是Android进程通信(IPC)的核心机制,其DeathRecipient功能可监听服务端进程异常终止。关键实现包括: 原理:Binder驱动检测服务端进程终止后,通知所有注册了死亡回调的客户端 核心类: IBinder.linkToDeath()注册监听 DeathRecipient.binderDied()回调处理原创 2025-09-03 11:00:25 · 923 阅读 · 0 评论 -
Android 系统应用如何根据包名静默卸载应用
摘要:Android系统出于安全考虑,严格限制静默卸载应用,仅系统级应用或Root权限设备可实现。系统应用需预装在/system目录并使用厂商签名,通过PackageInstaller或PackageManagerAPI实现无确认卸载;Root方案需执行pm uninstall命令。普通应用只能调用系统卸载界面(需用户手动确认)。高版本Android推荐使用PackageInstaller,需配合PendingIntent接收结果。该功能深度依赖系统权限,普通开发者无法直接实现。(149字)原创 2025-08-27 10:44:31 · 1226 阅读 · 0 评论 -
Improve Android App Performance
According to Droidcon NYC 2015 : 10 ways to improve your Android app performance原创 2016-03-05 22:41:06 · 532 阅读 · 0 评论 -
Android Splash 的最佳实践
如何通过品牌广告主题有效利用 App 的冷启动时间 App 的冷启动时间取决于它的尺寸大小以及你在它的 Application 类的 onCreate() 方法内的所部属任务的多少(我希望尽可能的少)。原创 2017-04-07 11:45:57 · 2362 阅读 · 0 评论
分享