avatar
文章
98
标签
33
分类
13
首页
归档
标签
分类
友链
关于
Fleming's Blog
搜索
首页
归档
标签
分类
友链
关于

Fleming's Blog

ViewModel在Activity和Fragment之间共享
发表于2023-11-21|经验
ViewModel在Activity和Fragment之间共享在 Android 的 Jetpack ViewModel 架构组件中: 在 Activity 中使用 by viewModels() 创建的 ViewModel,默认作用域是该 Activity。 在 Fragment 中使用 by activityViewModels() 创建的 ViewModel,其作用域也是 宿主 Activity。 因此,只要 ViewModel 的类型相同,并且使用的是默认的 Factory 和 key(即没有自定义 key),那么无论你是在 Activity 中通过 viewModels() 还是在 Fragment 中通过 activityViewModels() 获取,它们都会共享同一个 ViewModel 实例。 原理简述ViewModel 是通过 ViewModelStoreOwner 来管理生命周期和存储的。 Activity 是一个 ViewModelStoreOwner。 viewModels() 在 Activity 中会从 Activity 自己的 Vie...
更新当前的选中状态
发表于2023-11-21|Code
更新当前的选中状态123456789101112131415161718192021222324252627282930313233private fun updateSelectStatus(curUser: User) { mAdapter.run { var targetPosition = -1 var previousCheckedPosition = -1 // 遍历一次,同时更新状态并记录位置 data.forEachIndexed { index, user -> val wasChecked = user.isChecked val shouldBeChecked = (user.uid == curUser.uid) if (wasChecked != shouldBeChecked) { user.isChecked = shouldBeChecked ...
将 raw 资源复制为临时文件
发表于2023-11-14|Code
将 raw 资源复制为临时文件123456789101112131415161718192021import java.io.*fun copyRawToCache(context: Context, @RawRes rawId: Int, fileName: String): File? { val cacheFile = File(context.cacheDir, fileName) if (cacheFile.exists()) { // 可选:避免重复复制(注意更新策略) return cacheFile } return try { context.resources.openRawResource(rawId).use { input -> cacheFile.outputStream().use { output -> input.copyTo(output) ...
系统服务的实现方式
发表于2023-09-29|系统
系统服务的实现方式 方式 实现语言 启动方式 调用方 适用场景 1. Java 系统服务 Java SystemServer 启动 Java 系统 App、SystemUI、Settings 逻辑简单,需与 AMS/PMS 交互 2. Native AIDL 服务 C++ init 启动(.rc) C++(如 frameworks/av)、Java(通过 Binder) 高性能、C++ 实现、跨语言调用 ✅ 3. 传统 Native Binder 服务 C++ init 启动 C++ 老项目、不依赖 AIDL 4. HIDL / AIDL (vendor) C++/Java hwservicemanager vendor HAL、system/vendor 主要用于 HAL 层,不推荐用于 system 内部服务 5. Socket / HAL / 共享内存 C/C++ 自定义 仅限本地进程 低延迟、无 Binder 开销,但不是标准系统服务 ✅ 二、针对你的场景:哪种最合适?你的...
构建jni_libs
发表于2023-09-16|系统
构建jni_libs 系统 App 本来就不该用 SDK 模式 —— SDK 模式是给第三方 App 或 SDK 库用的。 模式 特点 可见模块 平台模式(无 sdk_version) 用于构建系统镜像、系统 App 可见所有模块,包括 “libc++_shared” SDK 模式(有 sdk_version) 用于构建面向第三方 App 的库 只能依赖 NDK/SDK 公共模块,如 “ndk_libc++_shared”
开发方向之Framework层
发表于2023-06-04|系统
开发方向之Framework层Framework层开发是Android系统开发中的一个关键领域,它涉及到对Android框架的理解和定制化修改。这个层次的开发通常需要开发者具备深厚的Java知识以及对整个Android系统架构有全面的理解。以下是关于Framework层开发的一些具体介绍: Android Framework概述Android Framework是位于Linux内核之上的一个抽象层,它为应用程序提供了各种服务和API。这些服务和API使得开发者能够构建丰富的用户界面、处理数据、管理资源等。Framework的核心组件包括Activity Manager Service (AMS)、Window Manager Service (WMS)、Content Providers、View System等。 主要关注点 核心服务:理解并能修改AMS、WMS等核心服务的工作机制对于Framework层开发至关重要。例如,AMS负责管理应用进程的状态,而WMS则负责管理屏幕上的窗口。 IPC(Inter-Process Communication)机制:Android使用B...
分区存储获取文件
发表于2023-03-24|系统
分区存储获取文件从 Android Jetpack 的 Activity Result API 开始,推荐使用 ActivityResultLauncher 来处理活动结果(如启动文件选择器或拍照等操作)。相比于传统的 startActivityForResult() 方法,ActivityResultLauncher 提供了更简洁、现代化的 API。 以下是使用 ActivityResultLauncher 和 Storage Access Framework (SAF) 获取文件的完整示例代码: 1. 使用 ActivityResultLauncher 启动 SAF 文件选择器123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android...
适配34广播动态注册
发表于2023-02-08|Code
适配34广播动态注册在target 适配到34之后, 要注意registerReceiver方法的第三个参数必须设置RECEIVER_EXPORTED或RECEIVER_NOT_EXPORTED,否则报错。12345678910111213141516/** * 适配14,动态注册需要加flag * @param context * @param receiver * @param filter */fun registerReceiverCompat( context: Context, receiver: BroadcastReceiver, filter: IntentFilter) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { context.registerReceiver(receiver, filter, RECEIVER_NOT_EXPORTED) } else { ...
蓝牙项目启动权限和蓝牙定位开关的问题
发表于2023-02-08|经验
蓝牙项目启动权限和蓝牙定位开关的问题蓝牙项目启动,想要顺利地使用蓝牙扫描和连接,分两种情况 Android 6以上到Android 12以下需要动态申请定位权限ACCESS_COARSE_LOCATION和ACCESS_FINE_LOCATION,两个都要申请 Android 12以上需要动态申请BLUETOOTH_SCAN和BLUETOOTH_CONNECT 完成上述权限申请后,还需要在6-12判断蓝牙和定位是否打开,12以上不需要打开定位也可以 申请动态权限,拒绝就提示进设置,同意就走下一步 判断蓝牙和定位开关是否打开
Android的支持库整理
发表于2023-02-08|经验
Android的支持库整理Android 支持库(Support Libraries)是一个集合,包含了多个不同的库,每个库都支持特定的 Android 版本和功能。随着时间的发展和技术的进步,这些库也在不断演变。以下是 Android 支持库的主要分类及其用途: Compatibility Libraries (兼容性库) v4 (support-v4):提供了核心兼容性功能,如 Fragment、ViewPager 等,使得开发者可以在低版本 Android 上使用较新的 API 功能。 v7 (appcompat-v7, recyclerview-v7, cardview-v7, 等):提供了更高级的 UI 组件和行为,如 Material Design 组件(Toolbar、CardView)、RecyclerView 等。 Material Components Library (材料组件库) material (material-components):包含了 Material Design 组件,如 BottomNavigationView、Floatin...
1234…10
avatar
Fleming Chen
不积跬步无以至千里,不积小流无以成江海。——《荀子·劝学》
文章
98
标签
33
分类
13
Follow Me
公告
欢迎来到我的博客,有任何疑问可以随时联系我交流讨论!
最新文章
音频流处理过程
音频流处理过程2026-01-16
AOIP和VOIP
AOIP和VOIP2026-01-06
AudioFlinger的基本概念
AudioFlinger的基本概念2025-08-28
音频领域基本概念
音频领域基本概念2025-08-20
Unicast、Multicast、Broadcast的含义及关系
Unicast、Multicast、Broadcast的含义及关系2025-08-19
分类
  • ADB9
  • Code19
  • Flutter1
  • Git10
  • Grep1
  • Linux3
  • Repo2
  • Unity 3D1
标签
Handler BroadcastReceiver 缓存 经验 linux Android Studio 代码 MVP Dialog git flutter Message LruCache UI EditText 扩展 学习路线 数据库 架构 系统广播 Markdown SQLite 系统 unity AlertDialog 自学 日常 IDE adb 音频 Android 开发工具 AsyncTask
归档
  • 一月 2026 2
  • 八月 2025 3
  • 七月 2025 5
  • 六月 2025 1
  • 四月 2025 2
  • 十一月 2024 1
  • 七月 2024 2
  • 二月 2024 4
网站信息
文章数目 :
98
本站访客数 :
本站总浏览量 :
最后更新时间 :
© 2016 - 2026 By Fleming Chen框架 Hexo 6.1.0|主题 Butterfly 5.5.4
搜索
数据加载中