Binder机制
Binder机制这是一个非常深入的问题。答案是:在现代 Android 架构(Project Treble)中,对于供应商(Vendor)进程来说,使用 vndbinder 几乎是强制性的。 以下是原因以及如果不使用它会面临的后果: 1. 为什么“必须”用它?Android 将 Binder 通信分成了三个独立的“世界”(Domains),它们物理上隔离,使用不同的设备驱动: **/dev/binder (Framework 域)**:仅供 System 分区进程(如 ActivityManager)使用。 **/dev/vndbinder (Vendor 域)**:专门供 Vendor 分区进程(如你的 musicanalyzer 和各种 HAL)互相通信。 **/dev/hwbinder (Hardware 域)**:主要用于旧版的 HIDL 接口。 强制原因:Google 的 VTS (Vendor Test Suite) 测试有一项硬性规定:禁止 Vendor 进程直接连接到 /dev/binder。 如果你尝试让 musicanalyzer 注册到系统的 serv...
sqlite3查看数据库
sqlite3查看数据库.db 文件通常是 SQLite 数据库文件。Room 是 Android 官方推荐的本地数据库库,它底层使用的就是 SQLite。因此,Room 生成的 .db 文件本质上就是一个标准的 SQLite 数据库文件。 你可以通过以下方式在电脑上查看 .db 文件的内容: ✅ 方法一:使用 sqlite3 命令行工具(推荐)步骤如下: 安装 sqlite3 工具(如果尚未安装): macOS(通常已预装):1sqlite3 --version Windows: 下载地址:https://www.sqlite.org/download.html 下载 sqlite-tools-win32-*.zip,解压后将 sqlite3.exe 加入系统 PATH。 Linux(Ubuntu/Debian):1sudo apt install sqlite3 打开终端(命令行)并进入 .db 文件所在目录,例如: 1cd /path/to/your/database/ 使用 sqlite3 打开数据库: 1sqlite3 your_database...
Android开发方向
Android开发方向Android系统开发主要分为两个大的方向:应用开发(上层开发)和系统层开发(底层开发)。每个方向都有其特定的关注点和技术要求。 应用开发方向应用开发者主要关注于用户界面的设计和功能的实现。随着经验的积累,他们可能会转向以下领域: 用户体验设计:专注于用户界面和交互体验的设计。 架构设计:学习并实践不同的软件设计模式,如MVC、MVP、MVVM等,以构建可维护、可扩展的应用程序。 性能优化:掌握如何优化应用性能,包括内存管理、响应速度等方面。 跨平台开发:学习使用Flutter、React Native等技术来创建可以同时运行在Android和iOS上的应用。 特定领域的应用开发:例如音视频开发、游戏开发等。 系统层开发方向系统层开发者则更关注于Android系统的底层实现,包括但不限于: Framework层开发:深入了解Android框架的工作原理,包括Activity Manager Service (AMS)、Window Manager Service (WMS)等核心服务的源码解析。 BSP(Board Support Package)驱动...
Flutter常用指令
Flutter常用指令Flutter 的常用指令主要分为 开发工具命令(flutter 命令行)和 Dart 工具命令(dart 命令行),以下是核心指令整理: 一、Flutter 常用命令1. 项目创建与运行 创建新项目 1flutter create <项目名称> 运行项目(自动选择设备) 1flutter run 指定设备:flutter run -d <设备ID>(通过 flutter devices 查看设备ID) 生产模式:flutter run --release 调试模式:flutter run --debug 快捷指令 r Hot reload. R Hot restart. h List all available interactive commands. d Detach (terminate “flutter run” but leave application running). c Clear the screen q Quit (terminate the application on the device)...
启动模式 - intent
启动模式 - intent好的,我们来详细对比 singleTop 与其他三种标准启动模式(standard, singleTask, singleInstance)在 Intent 获取方式 以及 核心行为 上的区别。 核心区别在于:系统何时会创建新实例,何时会复用旧实例,以及复用时如何传递新的 Intent。 1. standard (标准模式) 行为:这是默认模式。每次启动该 Activity,系统都会创建一个新的实例,并将其压入启动它的 Activity 所在的任务栈(Task)中。可以有多个实例,也可以在不同任务栈中存在。 Intent 获取: 只在 onCreate() 中获取。因为每次都是新实例,所以新的 Intent 总是通过 onCreate(Bundle savedInstanceState) -> getIntent() 来获取。 onNewIntent() 永远不会被调用,因为没有复用旧实例的情况。 适用场景:大多数常规 Activity,例如详情页、设置页等,每次打开都希望是独立的新页面。 2. singleTop (栈顶复用模式) 行为...
Repo upload的细节
Repo upload的细节1git config --get remote.gerrit.review 输出: 1ssh://gerrit 要正确设置review url 到底应该是SSH还是HTTP???12cd ~/falconrepo forall -c 'git config --replace-all remote.gerrit.review http://10.10.1.127:30090/' 然后验证: 12cd prebuilts/sdkgit config --get remote.gerrit.review ✅ 应该输出: 1http://10.10.1.127:30090/ 🔁 建议对 cust/app/orion-sipclient 也执行一次验证和修复! 🧠 为什么 review URL 必须是 HTTP,不能是 SSH?因为: commit-msg hook 是从 http://.../tools/hooks/commit-msg 下载的 Gerrit Web UI 链接是 http://.../c/12345...
git switch和checkout的区别
git switch和checkout的区别git switch 和 git checkout 都可以用来切换分支,但它们的设计理念、功能和使用方式有所不同。git switch 是 Git 2.23 版本(2019年发布)引入的新命令,旨在将 git checkout 的功能进行拆分,使其职责更单一、更清晰。 以下是它们的主要区别: 1. 设计目的与职责 git checkout: 这是一个“多面手”命令,功能非常复杂。它既可以用来切换分支,也可以用来恢复工作区文件(丢弃修改)、创建新分支等。这种多功能性使得它容易混淆,尤其是在处理文件和分支时。 git switch: 这是一个“单一职责”命令,专门用于切换分支。它的设计目的就是让分支切换操作更清晰、更安全、更直观。 2. 创建新分支的方式 git checkout: 创建并切换到新分支:git checkout -b <new-branch-name> 从特定提交创建新分支:git checkout -b <new-branch-name> <start-point> git swi...
如何使用AsyncTask
你会使用AsyncTask吗?前言AsyncTask 的本身其实是对 Handler 机制的封装,目的是让异步操作的实现变得简单,更多的关注业务实现。 基本步骤 创建一个继承自 AsyncTask 的类。 确定 AsyncTask<Params(参数), Progress(进度), Result(结果)> 泛型的三个参数类型。 重写以下方法: 1234protected void onPreExecute() // 可选protected abstract Result doInBackground(Params... params); // 必须重写protected void onPostExecute(Result result) // 可选,但一般都会重写protected void onProgressUpdate(Progress... values) // 可选,如果不需要进度可以写 Void(大写的 V) 注意: onPreExecute 方法会在execute方法调用前调用,运行在UI线程,可以做进度框的展示等 ; doInB...
有一种优雅的架构叫MVP架构
前言MVP 是 Model-View-Presenter 的缩写,是一种经典的 Android 应用架构模式。它将业务逻辑从 Activity/Fragment 中抽离出来,使代码更易测试、维护和复用。软件开发总是强调一个重点,就是尽可能的将系统做到高内聚低耦合,各模块各司其职,职责单一,逻辑清晰。 从上图可以清晰的理解什么是MVP(Model、View、Presenter)架构,其实MVP是从MVC模式衍生出来的,目的就是为了让视图层view和模型层model之间解耦。 它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。在MVC里,View是可以直接访问Model的!从而,View里会包...
Android自学路线
前言很多初学者面对 Android 开发感到迷茫,不知道从何入手。本文提供一条清晰的自学路径,帮助你系统掌握 Android 开发技能。 第一阶段:Java 基础 面向对象(类、对象、继承、多态) 异常处理 集合框架(List、Map、Set) 多线程基础 IO 流 推荐书籍:《Java核心技术 卷I》 第二阶段:Android 基础组件 Activity 生命周期 Intent 与页面跳转 布局(LinearLayout、RelativeLayout、ConstraintLayout) 常用控件(TextView、Button、EditText、ListView、RecyclerView) 资源文件(strings.xml、colors.xml、dimens.xml) 第三阶段:进阶知识 网络请求(OkHttp、Retrofit) 数据存储(SharedPreferences、SQLite、Room) 异步处理(Handler、AsyncTask、Thread、ExecutorService) 广播与服务(BroadcastReceiver、Service) 权限管理(...




