
Android
文章平均质量分 92
日常android开发总结
Hirezy
人生没有彩排,每一个细节都是现场直播。
是非审之于己,毁誉听之于人,得失安之于数,成败归之于零.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Android Camera API2架构
Camera API 2 (下面用Camera2简称)是最新的 Android 相机框架 API,它取代了已弃用的相机框架库(Camera API 1)。Camera2 为复杂的用例提供深入的控制,但需要用户管理特定于设备的配置。用户可以在相应的参考文档中了解 Camera2 中的特定类和函数。总体上Camera遵循Client-Server架构,通过Binder通讯完成Camera APP -> Camera API2 -> CameraService -> Camera Hal流程。原创 2025-04-14 08:30:00 · 1250 阅读 · 0 评论 -
Android内部存储与外部存储(私有目录与公共目录)
全面解析Android内部存储与外部存储(私有目录与公共目录)原创 2025-03-18 00:41:33 · 1543 阅读 · 0 评论 -
Dagger 2 系列(六)——进阶之Component 依赖、@SubComponent 与多 Component 下的 Scope 使用限制
在日常的项目开发过程中,我们需要认真的考虑 Component 间的依赖关系,一般的,这些依赖关系的建立是根据具体的业务。在多 Component 下 Scope 的使用是有限制的, 其最终的标准都是不可以导致 Scope 被破坏。自此我们对依赖注入的思想相比也有了一定的了解,了解了Dagger2各个注解的作用,后续我会讲解Android常用的另外俩个依赖注入框架Hilt和Koin,对比三个依赖注入框架各自的不同和使用场景。如果你是新手可以从头看Dagger 2 系列。原创 2025-03-11 08:30:00 · 1761 阅读 · 0 评论 -
Dagger 2 系列(五)——进阶之@Scope 和 @Singleton
在上一篇Dagger 2 系列(四)——@Named 和 @Qualifier注解介绍,了@Named 和 @Qualifier注解,这篇文章,我们将会了解另外俩个注解:@Scope 和 @Singleton。@Scope 是什么@Singleton 是什么@Scope和 @Component 如何协同作战。Dagger2 的学习曲线确实是比较陡的,个人认为陡的点一是对依赖注入(控制反转)概念的理解,所以有了Dagger 2 系列(一)——基础篇之依赖注入。原创 2025-03-10 22:36:46 · 879 阅读 · 0 评论 -
Dagger 2 系列(四)——@Named 和 @Qualifier注解介绍
在上一篇Dagger 2 系列(三)——@Module 和 @Provides注解介绍,了@Module 和 @Provides注解,这篇文章,我们将会了解另外俩个注解:@Named 和 @Qualifier。原创 2025-03-10 21:57:15 · 632 阅读 · 0 评论 -
Dagger 2 系列(三)——@Module 和 @Provides注解介绍
在上一篇Dagger 2 系列(二)——@Inject、@Component 注解介绍一文,了@Inject、@Component 注解,这篇文章,我们将会了解另外俩个注解:@Module 和 @Provides。@Module 是什么@Provides 是什么@Module 、@Provides 和@Component 如何协同作战。1. 什么是 Module既然在Dagger 2 系列(二)——@Inject、@Component 注解介绍。原创 2025-03-09 22:20:02 · 907 阅读 · 0 评论 -
Dagger 2 系列(二)——@Inject、@Component 注解介绍
到此为止,我们已经实现了基本的基于 Dagger2 的依赖注入。用 @Inject 注解标注目标类中依赖类的实例对象用 @Inject 注解标注依赖类的构造函数若其他类还依赖于其他的类,则重复进行上面2个步骤调用 Component(注入器)的 injectXXX(Object)方法开始注入(injectXXX方法名字是官方推荐的名字,以inject开始)Component 就像 目标类 和自己的 依赖类 的媒介,把目标类依赖的实例注入到目标类中,来初始化目标类中的依赖实例变量。原创 2025-03-09 21:53:25 · 1147 阅读 · 0 评论 -
Dagger 2 系列(一)——基础篇之依赖注入
上面例子面临着一个问题,一旦Person的创建方式(如构造参数)发生改变,那么你不但需要修改 MainClass 中创建Person的代码,还要修改其他所有地方创建Person的代码。Dagger2 的原理是在编译期生成相应的依赖注入代码。依赖注入就是调用者需要的另一个对象实例不在调用者内部实现,而是通过一定的方式从外部传入实例,解决了各个类之间的耦合。,该容器在需要的时候通过它自己的方式创建该类的实例,即:创建类实例权利的移交。的方式创建相关类的实例的权利,交给具体的业务(所谓的 IOC 容器)原创 2025-03-09 21:25:07 · 496 阅读 · 0 评论 -
Android AudioFlinger(四)—— 揭开PlaybackThread面纱
继上一篇Android AudioFlinger(三)—— AndroidAudio Flinger 之设备管理...接下来我们进一步研究下PlaybackThread的循环主题具体做了什么?原创 2025-03-07 21:25:15 · 1297 阅读 · 0 评论 -
Android AudioFlinger(三)—— AndroidAudio Flinger 之设备管理
AndroidAudio Flinger 之设备管理原创 2025-03-07 18:07:36 · 1309 阅读 · 0 评论 -
Android AudioFlinger(二)——AndroidAudio Flinger的启动流程
audioflinger是整个Android音频系统的核心,起到了承上启下的作用,乘上就是为上层应用提供了各种访问和管理的接口,启下就是通过HAL来管理各种音频设备。原创 2025-03-07 18:11:07 · 573 阅读 · 0 评论 -
Android AudioFlinger(一)——初识AndroidAudio Flinger
AudioFlinger 是 Android 系统中的音频中间层(audio HAL, Audio Hardware Abstraction Layer)的一部分,负责管理音频的混音、播放和音量控制等功能。它充当 Android 应用程序和音频硬件之间的桥梁。原创 2025-03-07 17:34:49 · 1151 阅读 · 0 评论 -
Android中AIDL和HIDL的区别
在Android中,AIDL(Android Interface Definition Language) 和 HIDL(HAL Interface Definition Language) 是两种用于定义跨进程通信接口的语言。AIDL 是 Android 系统最早支持的 IPC(进程间通信)机制,而 HIDL 是从 Android 8.0 开始引入,用于 HAL(Hardware Abstraction Layer)模块的接口定义。原创 2025-03-07 17:18:47 · 1678 阅读 · 0 评论 -
Android进程间通信方式之AIDL
Binder 机制:AIDL 基于 Binder 进行 IPC,高效且安全。Stub & Proxy:AIDL 自动生成 Stub(服务端实现)和 Proxy(客户端代理)。多进程通信:使用 bindService() 连接远程 Service,返回接口实例。线程安全:AIDL 默认方法在 Binder 线程池中执行,避免 UI 线程阻塞。AIDL 是 Android 进程间通信的核心方式之一,适用于 高效、多进程数据共享和方法调用。原创 2025-03-06 22:40:50 · 1948 阅读 · 0 评论 -
推荐一个基于Koin, Ktor & Paging等组件的KMM Compose Multiplatform项目
KMM是一个在多个平台上无缝共享代码的能力的框架。已成为跨平台开发领域的改变者。原创 2025-03-06 22:24:49 · 743 阅读 · 0 评论 -
Android不同Activity之间共享同一个ViewModel
不同Activity之间实现共享同一个ViewModel原创 2025-03-06 22:03:03 · 594 阅读 · 0 评论 -
Android全面解析之context机制(三): 从源码角度分析context创建流程(下)
前面已经讲了什么是context以及从源码角度分析context创建流程(上)。限于篇幅把四大组件中的广播和内容提供器的context获取流程放在了这篇文章。广播和内容提供器并不是context家族里的一员,所以他们本身并不是context,因而他们的context肯定是直接或间接从Application、Activity或者Service获取。然后对context的设计进行了讨论,从更高的角度看context,能够帮助我们看到context的本质,也能帮助我们更好地理解并使用context。原创 2024-08-14 19:45:03 · 1115 阅读 · 1 评论 -
Android全面解析之context机制(二): 从源码角度分析context创建流程(上)
这篇文章从源码角度分析context创建流程。在上一篇Android全面解析之Context机制(一) :初识context一文中讲解了context的相关实现类。经过前面的讨论,读者对于context在心中有了一定的理解。但始终觉得少点什么:activity是什么时候被创建的,他的contextImpl是如何被赋值的?Application呢?为什么说ContextProvider的context是Application,Broadcast的context是Activity?原创 2024-08-11 23:49:18 · 1163 阅读 · 0 评论 -
Android全面解析之Context机制(一) :初识Android context
回想一下最初学习Android开发的时候,第一用到context是什么时候?如果你跟我一样是通过郭霖的《第一行代码》来入门android,那么一般是Toast。Toast.makeText(this, "我是toast", Toast.LENGTH_SHORT).show()当初也不知道什么是Context,只知道他需要一个context类型,把activity对象传进去即可。从此context贯穿在我开发过程的方方面面,但我始终不知道这个context到底有什么用?为什么要这个对象?/***/原创 2024-08-11 23:30:40 · 806 阅读 · 0 评论 -
Android之深入NFC通信
NFC技术作为一种新兴技术在世界范围内受到了广泛关注,尤其是手机的广泛应用,为NFC技术的长足发展提供了前提。NFC技术原理简单,因此成本相对低廉,除此之外NFC通信的带宽高、能耗低等特点也是促进NFC技术发展的一大优势。原创 2024-07-22 00:13:20 · 1943 阅读 · 2 评论 -
Framework源码面试之Handler面试集合
Handler主线程和子线程通过handler交互,交互的载体是通过Message这个对象,实际上我们在子线程发送的所有消息,都会加入到主线程的消息队列中,然后主线程分发这些消息,这个就很容易做到俩个线程信息的交互。看到这里,你可能有疑问了,我从子线程发送的消息,怎么就加到了主线程的消息队列里呢???大家可以看看你自己的代码,你的handler对象是不是在主线程初始的?子线程发送消息,是不是通过这个handler发送的?这就很简单了,handler只需要把发送的消息,加到自身持有的Looper对象的。原创 2024-07-21 23:59:38 · 897 阅读 · 2 评论 -
Android全面解析Window机制
先假设如果没有window,会发生什么:我们看到的界面ui是view,如我们的应用布局,更简单是一个button。假如屏幕上现在有一个Button,如图1,现在往屏幕中间添加一个TextView,那么最终的结果是图2,还是图3:在上图的图2中,如果我要实现点击textView执行他的监听事件逻辑,点击不是textView的区域让textView消失,需要怎么实现呢?原创 2024-07-21 23:37:27 · 1311 阅读 · 0 评论 -
Android多进程和跨进程通讯方式
进程间通信(InterProcess Communication缩写IPC)是指在不同进程之间传播或交换信息。进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元。Android多进程和跨进程通讯方式有几种方式?原创 2023-12-13 20:45:40 · 2645 阅读 · 1 评论 -
Android 系统启动过程纪要(基于Android 10)
认识Android的系统启动的三个进程 init ->zygote -> system_server原创 2024-01-16 00:20:42 · 1587 阅读 · 0 评论 -
Android Activity的启动流程(Android-10)
深入认识startActivity(Intent)原创 2024-01-16 00:21:47 · 2299 阅读 · 0 评论 -
全面认识Kotlin协程(Coroutine/Channel/Flow)
全面认识Kotlin协程: Coroutine/Channel/Flow,协程是协作式任务, 线程是抢占式任务, 本质上两者都属于并发。原创 2023-12-06 23:59:58 · 2121 阅读 · 3 评论 -
Kotlin Flow 操作符
Kotlin Flow 常用的操作符,巧妙使用Flow操作符可以大大简化我们的程序结构,提升可读性与可维护性。原创 2023-12-06 21:31:03 · 1578 阅读 · 1 评论 -
Android性能优化 - 从SharedPreferences到DataStore
Android性能优化 - 从SharedPreferences到DataStore原创 2023-11-30 02:41:12 · 817 阅读 · 2 评论 -
Android性能优化- 从SharedPreferences到MMKV
从SharedPreferences到MMKV原创 2023-11-30 02:39:54 · 1181 阅读 · 0 评论 -
Android图片压缩原理分析(三)—— 哈夫曼压缩讲解
查阅源码后发现:在Android系统在7.0版本之前内部使用的是libjpeg非turbo版,并且为了性能关闭了Huffman编码计算,使用默认的哈夫曼表,而不是算数编码。从Android 7.0版本开始,系统内部使用了libjpeg-turbo库并且启用Huffman编码,标示就是optimize_code已经设置为了TRUE,也就是默认使用Huffman压缩计算生成新的哈夫曼表。libjpeg-turbo是一个C语音编写的高效JPEG图像处理库,相当于是一个libjpeg的增强版。原创 2023-08-24 17:11:35 · 2299 阅读 · 0 评论 -
Android图片压缩原理(二)—— 鲁班压缩算法解析
前面几篇文章,我们了解了一些关于。原创 2023-08-22 00:15:00 · 4005 阅读 · 0 评论 -
Android Bitmap详解(下)之图片缓存详解
public static Bitmap createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter)//以src为原图,创建新的图像,指定新图像的高宽以及是否可变。public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height)以source为原图,创建新的图片,指定起始坐标以及新图像的高宽。原创 2023-08-21 11:25:46 · 2149 阅读 · 0 评论 -
Android之深入WebView
WebView目录思维导图WebView 的基本使用WebViewWebSettingsWebViewClientWebChromeClientWebView 与 JS 交互Android 去调用 JS 代码JS 调用 Android 代码WebView 常见问题汇总WebView 优化参考思维导图基本使用WebView 是一个基于 webkit 引擎,展示 web 页面的空间。WebView 在低版本和高版本采用了不同的 webkit 内核版本,4.4 .原创 2022-03-08 18:10:36 · 5511 阅读 · 0 评论 -
Android 动画 Animator 家族
Animator目录思维导图帧动画使用方式优缺点应用场景补间动画位移、旋转、缩放、透明度动画优缺点应用场景属性动画层次关系ValueAnimatorObjectAnimatorTimeAnimatorAnimatorSet插值器、估值器TypeEvaluatorIntEvaluatorFloutEvaluatorArgbEvaluatorTimeInterpolator / Interpolator / BaseInterpol.原创 2022-01-20 15:55:03 · 2961 阅读 · 0 评论 -
Android深入理解Fragment
Fragment目录思维导图概述设计原因基本使用xml 声明代码设置添加没有 UI 的 fragment生命周期管理 Fragment 和执行事务与 Activity 通信常见问题汇总创建 Fragment 实例传递数据getActivity() 引用问题FragmentTransaction 的 add 和 replace 区别getChildFragmentManager()回退栈的理解Fragment 重叠onActivityResult()源码.原创 2021-11-05 11:14:17 · 750 阅读 · 0 评论 -
Android常见的内存泄漏分析
内存泄漏原因当应用不需要在使用某个对象时候,忘记释放为其分配的内存,导致该对象仍然保持被引用状态(当对象拥有强引用,GC无法回收),从而导致内存泄漏。常见的内存泄漏源头泄漏的源头有很多,有开源的第三方框架引起的;也有android系统自身造成的,比如webview的内存泄漏;还有一个是我们可以控制的,就是自身编码失误或者逻辑不严谨引起的内存泄漏。常见的内存泄漏以及解决方案Context 引起的内存泄漏常见问题:这个是最常见的,因为Activity经常要用到上下文Context,很有可能Ac原创 2021-09-27 14:55:12 · 1312 阅读 · 2 评论 -
Android Handler的内存泄露场景分析
在前面一篇博客《Android全面解析Handler》一文中,我们认识了Handler的异步通信机制,同时也提到过Handler如果使用不慎将会导致内存泄露。今天主要来讲述一下Handler的内存泄露场景可能存在的场景以及解决方案。场景一:直接传递外部类引用到静态内部类使用,导致静态内部类间接持有外部类的引用举个栗子,在一个静态内部类我们想访问外部类的成员属性,怎么办?可不可以直接访问了,答案当然是不想的,如下所示,我们的代码提示是会直接报错的:public class TestActivity ex原创 2021-09-09 15:52:28 · 7895 阅读 · 4 评论 -
Android 缓存机制
一、Android 中的缓存策略一般来说,缓存策略主要包含缓存的添加、获取和删除这三类操作。如何添加和获取缓存这个比较好理解,那么为什么还要删除缓存呢?这是因为不管是内存缓存还是硬盘缓存,它们的缓存大小都是有限的。当缓存满了之后,再想其添加缓存,这个时候就需要删除一些旧的缓存并添加新的缓存。因此 LRU(Least Recently Used)缓存算法便应运而生,LRU 是近期最常使用的算法,它的核心思想是当缓存满时,会优先淘汰那些近期最少使用的缓存对象。采用LRU 算法的缓存有两种:LrhCache 和原创 2021-07-31 15:16:40 · 12177 阅读 · 1 评论 -
Android全面解析Handler
前言:由于Handler和Binder是Android开发的俩大利器之一,所以有必要来深入讲解一下Handler,关于Binder可以参考我上一篇博客《IPC机制 Binder》,废话不多说,今天我将图文并茂,一节一节解剖Handler,一节一节的总结Handler相关知识点。#mermaid-svg-w8x1zwBESUZ0ZyLz .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-fami原创 2021-07-23 17:38:32 · 14613 阅读 · 12 评论 -
Cmake参数详细介绍
前言CMake 是一个高效的C/C++ 代码(包括 JNI 开发)编译工具,而CMake 的使用,作为开发者最关心的就是如何编写 CMakeLists.txt 。今天就以Android studio这个开发工具为例,详细介绍一下如何在Android studio这个开发工具中使用CMake。首先需要了解一下如何在 gradle文件中配置这些参数。gradle中常用配置参数首先我们需要在项目的根目录的build.gradle这个文件中添加先关的配置以及CMakeLists.txt 文件的路径。如下所示:原创 2021-05-26 11:13:49 · 14855 阅读 · 0 评论