- 博客(41)
- 资源 (7)
- 收藏
- 关注
原创 HDF 和 HIDL
HDF和HIDL是分属与生态的两种技术,核心区别在于所属系统、设计目标与架构定位,前者是HarmonyOS的驱动开发框架,后者是Android的硬件抽象层接口定义语言。
2025-11-02 19:38:32
563
原创 命名导出和默认导出
定义:每个模块仅允许通过导出一个主要成员(如类、函数、对象)。特点导入时可自定义名称,无需与原名称一致。无需使用{ }包裹导入内容。通常用于模块的“主功能”导出。
2025-11-02 17:22:49
301
原创 import语法
hilog是工具对象,用于主动输出日志信息。是错误类型,用于结构化处理异步操作中的异常。开发者需要根据具体场景正确使用这两种类型。一、区分对象与类型的核心方法在鸿蒙(HarmonyOS)开发中,通过以下方式区分import语法特征对象:直接通过模块名或默认导出引入,例如,此时rpc是模块提供的功能性对象。类型:通过或大括号中显式引入的类型名称,例如,此时是错误类型的定义。使用场景对象在代码中直接调用方法或访问属性(如类型一般用于定义变量、参数或进行类型断言(如。
2025-11-02 17:17:47
438
原创 HiLog模块
是一个包含所有日志级别接口(如debug、info、warn等)和辅助方法(如isLoggable)的命名空间对象,开发者可直接调用其方法。注意:HarmonyOS 5.0+版本中,HiLog模块已归属到性能分析套件,推荐使用新的导入路径。语句导入的是一个完整的日志模块对象,可以直接使用其接口进行日志操作。该模块设计为开箱即用模式,开发者只需关注日志内容和级别选择,无需手动管理对象生命周期。HiLog模块通过ES6模块化方式导出,在HarmonyOS开发中,
2025-11-02 17:07:49
368
原创 RxJava
RxJava 的核心优势:异步操作简洁化: 通过链式调用和操作符,将复杂的异步回调变得清晰、线性。强大的数据流转换: 操作符库极其丰富,可以轻松地对数据流进行任何你想要的处理。灵活的线程控制: 几行代码就能精确控制不同任务所在的线程。错误处理统一: 在链式调用的最后提供一个统一的错误处理入口。复杂的异步操作链(例如,一个请求的结果是下一个请求的参数)。需要频繁进行线程切换的任务。处理用户交互事件流(如搜索框输入联想)。多个任务需要并行执行并合并结果。
2025-11-02 09:03:52
657
原创 Retrofit 是什么
根据 API 返回的 JSON 结构,定义对应的数据类。// Kotlin data class data class User(val login : String , val id : Int , val avatar_url : String , val html_url : String) // 或者 Java 类(使用 Lombok 或手动生成 getter/setter) /**/这是 Retrofit 的核心,使用注解来描述 API。
2025-11-02 08:39:30
678
原创 Android 设备支持 A/B 分区
(也称为“无缝系统更新”)时,其启动过程在传统流程的基础上,增加了一个关键的。,在传统启动流程之上构建了一个更健壮、用户体验更好的系统更新与启动架构。这意味着无论从哪个 Slot 启动,用户数据和设置都是一致的。总而言之,带有 A/B 分区的 Android 设备通过。这是 A/B 分区系统稳定性的关键保障。当 Android 设备支持。这是 A/B 分区的精髓所在。:对于应用和数据来说,
2025-10-19 22:44:55
1040
原创 Android 系统的启动过程
Android 系统的启动过程是一个非常复杂且精妙的流程,它涉及到底层硬件、Linux 内核、原生服务、Java 框架以及应用的协同工作。这个过程可以比作一场精密的“多米诺骨牌”接力赛。
2025-10-19 22:41:44
884
原创 View 树体系
简单来说,View 树体系是一个由View和ViewGroup对象组成的、具有层次关系的树形结构。它定义了整个用户界面的结构和组件关系。View:是所有 UI 组件的基类,是叶子节点。例如一个按钮 (Button)、一段文本 (TextView)、一张图片 (ImageView它们负责绘制自己并响应点击等事件。ViewGroup:是View的子类,是容器,是分支节点。它可以包含多个View或其他ViewGroup。例如线性布局 ()、相对布局 ()、帧布局 () 等。它们负责测量和定位其子视图。把。
2025-10-19 19:28:18
539
原创 Android显示子系统
总的来说,Android 显示子系统是一个复杂但协作精密的体系。理解其核心模块如Surface及 HAL 层的工作方式,有助于你洞察应用界面从绘制到显示的完整旅程。
2025-10-19 19:21:14
740
原创 Android基础知识
Android系统采用分层架构设计,分为应用层、应用框架层、系统运行库与Android运行时、硬件抽象层和Linux内核五个主要子系统。应用层包含用户使用的应用程序;应用框架层提供开发API;系统运行库包含核心C/C++库和优化性能的ART运行时;硬件抽象层连接框架与硬件驱动;Linux内核负责基础系统功能。这种分层设计实现了稳定性、安全性和可移植性,使开发者只需关注应用框架层,制造商可专注于底层驱动。
2025-10-19 19:05:57
702
原创 TaskView
TaskView是AOSP提供给系统开发者的一个强大工具,用于实现真正的“应用内嵌应用”。它通过系统服务在底层创建一个独立但视觉上融合的任务栈,完美地解决了跨进程窗口管理的复杂性。如果你的角色是系统应用开发者(例如在为设备制造商工作),需要实现分屏、自由窗口或复杂的应用切换界面,那么深入理解并使用TaskView将是关键。对于普通应用开发者而言,了解其存在和原理有助于理解Android系统UI的工作机制,但无法直接在自己的应用中使用它。
2025-10-12 15:50:39
769
原创 TaskView 是一个系统内部使用的视图组件
TaskView是Android系统中负责“最近任务列表”中单个任务展示与交互的内部视图组件,属于系统应用层面的实现,不对外公开。开发者在普通应用中无法直接使用,但在研究系统源码(如定制Launcher、开发系统级应用)时,可能会接触到它的实现逻辑。
2025-10-12 15:45:46
393
原创 Android框架层的原生能力实现插件加载
在AOSP(Android Open Source Project)环境下,系统应用可以利用Android框架层的原生能力实现插件加载,无需依赖第三方框架。核心是通过AOSP提供的及隐藏API(系统应用可访问)实现插件的类、资源和组件加载。
2025-10-12 15:42:47
802
原创 一个系统应用加载另一个应用的插件
若你需要深度控制加载过程,实现高度动态化、或需与系统核心流程紧密集成(如进行系统级的Hook),方案一(修改ActivityThread)提供了这种可能性,但代价是复杂度和风险更高。若你的需求相对简单稳定,主要是将已知的第三方APK作为系统功能集成,并能接受插件更新需重新刷机的环节,方案二(预置为系统应用)无疑是更简单、稳定和安全的选择。希望这些方案和细节能帮助你构建自己的系统。如果你能分享更多关于插件的具体功能和使用场景,我或许能给出更精确的建议。
2025-10-12 15:40:08
625
原创 Android 系统应用中加载另一个应用作为插件
在Android系统应用中加载另一个应用作为插件,主要依赖于Android的动态加载技术,核心是通过类加载器(ClassLoader)加载插件APK中的类和资源。这种方式常用于实现模块化、动态功能扩展等场景。
2025-10-12 15:34:48
444
原创 配置HTTP代理
阿里:https\://mirrors.aliyun.com/gradle/distributions/v8.13.0/gradle-8.13-all.zip。腾讯:https\://mirrors.cloud.tencent.com/gradle/gradle-8.13-all.zip。华为:https://mirrors.huaweicloud.com/gradle/gradle-8.13-all.zip。腾讯:http://mirrors.cloud.tencent.com/AndroidSDK/
2025-10-12 09:21:36
177
原创 Android普通应用切到后台后,多长时间会被系统回收
AMS会通过Binder机制检测到进程死亡,然后清理掉该进程在系统服务中注册的所有信息(例如注销它的BroadcastReceiver,停止它的Service等),避免系统尝试与一个不存在的进程通信。LMK会检查AMS预先设置好的oom_adj分数阈值,然后找到分数高于阈值且分数最高的进程(即优先级最低的进程),将其杀死,释放其占用的内存。AMS根据新的状态,重新计算该进程的 oom_adj_score(例如,从一个较低的值提升到一个较高的值,如900),这个分数表示它被杀死的“容易程度”。
2025-09-21 21:25:34
949
原创 MVVM软件架构
MVVM是一种强大、现代且经得起考验的Android架构模式。它通过数据驱动和生命周期管理的核心优势,极大地提升了应用的可维护性、可测试性和健壮性。对于任何严肃的中大型Android项目,采用MVVM几乎是一个必然的选择。对于初学者,建议从这个核心组合开始,逐步理解和实践,再慢慢引入Data Binding、Hilt等更高级的组件。
2025-09-21 11:15:06
808
原创 System.currentTimeMillis()方法为什么受系统时间设置影响
当你需要测量时间间隔、耗时或进行超时判断(例如:动画、游戏循环、性能监测、定时任务)时,必须使用不受系统时间影响的单调时钟,如 SystemClock.elapsedRealtime() 或 System.nanoTime()。System.currentTimeMillis() 受系统时间设置影响是因为它的设计初衷是返回当前的“挂钟时间”(Wall Clock Time),也就是我们日常生活中使用的日期和时间。· 这个时间应该与墙上的时钟、手机状态栏显示的时间、以及世界上任何地方的标准时间保持一致。
2025-09-21 10:29:46
418
原创 Android 中获取稳定时间的方法
"转换为毫秒: " + (nanoTime / 1_000_000) + "ms");在Android中,获取不会因系统时间设置改变而跳变的时间通常需要使用基于设备启动时间的单调时钟。"格式化为时间: " + formatTime(elapsedTime));注意:如果需要跨设备重启保持时间跟踪,可以将设备启动时间与elapsedRealtime()结合使用,但这需要额外的实现。"格式化为时间: " + formatTime(uptime));android:text="稳定时间获取示例"
2025-09-21 10:23:22
974
原创 Android 中 `onTrimMemory(int level)` 方法最佳实践
是 Android 系统在内存不足时向应用发送的回调,旨在通知应用释放不必要的内存资源,从而帮助系统维持整体稳定性和多任务处理能力。这是一个协作机制,积极响应该回调可以显著降低你的应用被系统强制终止的概率,从而提升用户体验。它与(相当于)类似,但提供了更细粒度的上下文信息,让你能做出更智能的释放决策。处理根据严重程度,分层、逐步地释放资源。使用统一的资源管理类建议使用一个单例或依赖注入来管理你的内存缓存(如图片缓存、网络响应缓存、对象池等)。这样你可以在。
2025-09-20 22:40:35
1047
原创 Android普通应用切到后台后,多长时间会被系统回收
当系统可用内存低于某个 minfree 阈值时,LMK 就会从 adj 阈值列表中找到对应的 adj 值,并杀死 adj 值大于或等于该阈值的优先级最低的进程,直到可用内存恢复到令人满意的水平。· AMS 的角色:AMS 根据进程中运行组件的状态(如是否有前台 Activity、可见 Activity、运行中的 Service 等)动态计算每个进程的 oom_adj 值。需要注意的是,不同品牌的 Android 设备由于其定制系统和省电策略的存在,后台进程的回收机制和宽容度可能会有显著差异。
2025-09-20 22:16:19
685
原创 WMS的代码中哪些是在APP应用进程内运行,哪些是在WMS线程中运行?
你的 APP 进程:负责“做什么”(比如我要添加一个按钮、我要弹个对话框),以及“画什么”(测量、布局、绘制视图树)。它通过 Binder 将请求告知 WMS。WMS(在 system_server 中):负责“能不能做”(权限检查)、“摆在哪”(计算位置和层级)、“谁先谁后”(窗口排序和焦点决定)以及“最终显示”(与 SurfaceFlinger 协作合成界面)。它掌控全局,协调所有应用的窗口。
2025-09-14 10:07:33
691
原创 Activity与窗口的关系是什么?
可以把这一切想象成一个剧院:是剧院经理,负责管理整个舞台,决定哪个演员在哪儿表演、谁在前面谁在后面。Activity:是导演,他构思整场戏的内容和流程(生命周期和逻辑),但他自己不表演。:是舞台,是表演发生的抽象场地。导演(Activity)告诉舞台要演什么。DecorView:是舞台的基本布景和框架(包括幕布、灯光架等)。setContentView() 传入的布局:是舞台上的具体道具和演员。它们被放置在基本布景(DecorView)之中。:是舞台监督,负责协调导演和剧院经理。
2025-09-14 09:56:43
887
原创 Android中按键事件的分发过程
Android按键事件的分发流程分为系统层和应用层两个阶段:系统层通过InputDispatcher确定焦点窗口并跨进程分发事件;应用层从ViewRootImpl开始,经DecorView、Activity,在视图树中递归向下寻找消费事件的View。整个过程遵循自下而上、层层传递的原则,优先由焦点View处理,未被消费则回溯至Activity。相比触摸事件,按键分发更简单直接,完全基于焦点机制而非坐标命中测试。
2025-09-14 09:51:47
1001
原创 Android窗口的层级是如何管理的
Android窗口层级管理就像一个严格的“社会阶层”“阶层”固化窗口类型(Type)就像一个人的出身,决定了你属于哪个社会阶层(应用层、子窗口层、系统层)。系统层的人天生就比应用层的人“高”。“论资排辈”:在同一个阶层内部,添加顺序决定了你的地位。后加入的(后弹出的)会排在更前面(更上层)。最终,WMS作为“统治者”,严格维护着这个阶层的秩序,确保所有窗口都能按照正确的Z-order进行显示和交互。理解这个概念对于分析UI覆盖、触摸事件穿透等问题至关重要。可以将层级想象成一个公司部门部门层级(任务栈)
2025-09-14 09:41:42
1057
原创 【焦点屏幕】
焦点屏幕 → 焦点应用 → 焦点窗口焦点屏幕:系统首先判断用户的输入事件发生在哪个物理屏幕上(例如,用户点击了外接显示器而不是手机主屏)。焦点应用:在该屏幕上,系统找到位于最前台的、正在与用户交互的应用程序进程。焦点窗口:在该焦点应用中,系统找到位于视图层级最顶层的、可获取焦点的窗口(如一个对话框覆盖在Activity之上,则对话框窗口获得焦点)。概念层级关注点例子焦点窗口微观(窗口级)输入事件接收弹出的对话框、输入法窗口焦点应用中观(应用级)资源调度与生命周期。
2025-09-14 09:25:02
745
原创 什么是嵌入式系统
什么是嵌入式系统嵌入式系统(Embedded System) 是一种完全嵌入受控器件内部,为特定应用而设计的专用计算机系统。1、仅有非常有限的硬件资源,成本大幅下降,但对软件的优化提出更高要求。2、一般运行固定的程序或固定的操作系统,再加上可变的应用程序。3、有些为工业系统,仅用于某个特定的控制目的;有些因为有应用程序的加入而更显灵活,如手机,平板电脑。现代的嵌入式系统一般分为简单嵌入式系统和复杂嵌入式系统。1、简单嵌入式系统一般是由单片集成控制器作为硬件核心的嵌入式系统,其核.
2020-10-11 21:02:16
7661
转载 约束布局ConstraintLayout看这一篇就够了
https://www.jianshu.com/p/17ec9bd6ca8a《Android Studio开发实战:从零基础到App上线》随书源码(全面添加注释版)https://github.com/aqi00/android2
2019-09-15 16:35:25
335
转载 7-1 线性逻辑回归.py
# -*- coding: utf-8 -*-"""Created on Fri May 19 11:57:46 2017@author: 代码医生 qq群:40016981,公众号:xiangyuejiqiren@blog:http://blog.csdn.net/lijin6249"""import tensorflow as tfimport matplotlib.pypl...
2019-03-17 12:30:49
233
原创 TensorFlow基础知识
Tensor(张量) 是N维数组。Flow(流)意味基于数据流图的计算。Tensorflow是张量从 图像的一端流动到另一端的计算过程。一、模型构建session将图的OP分发到CPU或GPU之类的设计上,同时提供执行OP的方法。这些方法执行后,将产生的tensor返回。在Python语言中,返回的tensor是numpyndarray对象。session与图的交互过程中,...
2019-02-24 20:22:14
193
转载 代码样例:3-3 无占位符.py
# -*- coding: utf-8 -*-"""Created on Tue Jun 6 18:52:37 2017@author: 代码医生 qq群:40016981,公众号:xiangyuejiqiren@blog:http://blog.csdn.net/lijin6249"""import tensorflow as tfimport numpy as npimp...
2019-02-24 20:10:02
149
转载 样例代码:3-2 字典.py
# -*- coding: utf-8 -*-"""Created on Tue Jun 6 18:52:37 2017@author: 代码医生 qq群:40016981,公众号:xiangyuejiqiren@blog:http://blog.csdn.net/lijin6249"""import tensorflow as tfimport numpy as npimp...
2019-02-24 19:47:28
143
转载 样例代码:3-1 线性回归.py
# -*- coding: utf-8 -*-"""Created on Tue Jun 6 18:52:37 2017@author: 代码医生 qq群:40016981,公众号:xiangyuejiqiren@blog:http://blog.csdn.net/lijin6249"""import tensorflow as tfimport numpy as npimp...
2019-02-24 19:41:29
336
佐思汽研-汽车智能座舱白皮书(2021).pdf
2021-12-12
AutoSAR标准协议.rar
2021-01-24
机器学习个人笔记完整版v5.33-A4打印版
2019-03-17
PHP4 中文参考手册
2008-03-09
DOS高手速成全面手册
2008-03-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1