- 博客(20)
- 收藏
- 关注
原创 Android Framework 之了解 Launcher 启动过程
SystemServer 完成启动 LauncherActivity 的调用;Zygote 进行 Launcher 进程的 fork 操作;进入 ActivityThread 的 main(),完成最终 Launcher 的 onCreate() 操作;
2025-03-16 23:58:36
721
原创 Android Framework 之了解系统启动流程二
在 SystemServer 的 run() 方法中可以看到官方把系统服务氛围了三种类型:引导服务、核心服务和其他服务。引导服务 Boot Service(10个):核心服务 Core Service(9个):启动 bInder 线程池,这样就可以与其他进程进行通信;创建 SystemServiceManager 用于对系统的服务进程创建、启动和生命周期管理;启动各种系统服务;
2025-03-15 13:07:06
1099
1
原创 Android Framework 之了解系统启动流程一
首先,Bootloader 初始化硬件并加载 Linux 内核。内核启动后,运行第一个用户空间进程 init,它解析 init.rc 脚本,启动 Zygote 进程。Zygote 进程预加载系统类和资源,并 fork 出 SystemServer 进程。SystemServer 启动核心系统服务,如 ActivityManagerService 和 PackageManagerService,并启动 Launcher 应用。
2025-03-14 14:11:34
967
原创 Android Framwork 之深入理解 IPC Binder机制
我们都知道 Android 系统分成三层。最上层是 application 应用层,第二层是 Framework 层,第三层是 native 层。Android 应用和系统 Service 运行在不同进程中是为了安全、稳定以及内存管理的原因,但是应用和系统服务需要通信和分享数据。跨进程设计的好处:1.安全性:每个进程都单独运行的,可以保证应用层对系统层的隔离。2.稳定性:如果某个进程崩溃了不会导致其他进程崩溃。3.内存分配:如果某个进程以及不需要了可以从内存中移除,并且回收相应的内存。
2025-03-13 20:06:59
998
原创 深入理解组件化和ARouter
init() 方法主要是优先使用插件加载路由表信息到仓库中,如果没有使用插件,则使用包名 com.alibaba.android.arouter.routes 去dex文件中查找对应的类对象 查找到后,保存到sp文件中,非debug或者新版本的情况下,下次就直接使用sp文件中缓存的类信息即可。在init方法中,除了对实现类的调用,还有日志打印等,这是装饰模式。代码2,在线程池中,使用计数器判断拦截器是否全部执行,如果拦截器执行时间结束,但计数器大于0,则说明还有未执行完成的拦截器,超时退出。
2025-03-12 20:41:19
856
原创 Retrofit源码阅读
Retrofit的核心实现原理包括动态代理、注解解析、OkHttp请求执行和数据转换。它的设计非常灵活,支持多种扩展,是Android开发中最常用的网络请求库之一。
2025-03-11 17:15:42
909
原创 OKHttp3 源码阅读 - Kotlin版本
OKHttp 是由 Square 公司开源的,广泛应用于 Android 开发中,并且是 Retrofit 的底层实现。它是一个高效的 HTTP 客户端,适用于 Android 和 Java 应用程序。它支持 HTTP/2、连接池、GZIP 压缩、缓存等功能,能够帮助开发者更高效地处理网络请求。从 Android 4.4 开始 HttpURLConnection 的底层实现采用的是OKHttp。OkHttp是一个功能强大且灵活的HTTP客户端库,适用于各种网络请求场景。
2025-03-10 19:58:30
755
原创 开源框架--Glide源码阅读下
Glide是一个功能强大、性能优异的图片加载库,其核心原理包括缓存机制、生命周期管理、图片解码与转换等。先进行 Glide 构建;构建完成后,给每一个 RequestManager 绑定一个空白的 Fragment 来管理生命周期;然后构建 Request 对象;在 Request 对象(包括请求的宽、高、采样等)构建完后,开始进行资源请求,在请求之前先检测缓存,Engine 缓存机制的检测中会先检测活动缓存 ActiveResoure,然后再检测内存缓存 LruResoureCache。
2025-03-09 20:06:01
963
原创 Jetpack LiveData
LiveData 的核心原理是通过 LifecycleOwner 感知生命周期状态,确保数据更新只发生在活跃状态。它通过 ObserverWrapper 和 LifecycleBoundObserver 管理观察者,并通过 dispatchingValue() 方法分发数据。LiveData 的设计简单高效,适合处理与 UI 相关的数据流,但在复杂场景下可能不如 RxJava 或Kotlin Flow 灵活。
2025-03-06 15:01:19
943
原创 Jetpack ViewModel
ViewModel 是 Android Jetpack 架构组件之一,用于管理与 UI 相关的数据,并在配置更改(如屏幕旋转)时保持数据的持久性。数据持久化:ViewModel 可以在 Activity 或 Fragment 重建时保留数据,避免重复加载。UI 与数据分离:ViewModel 将 UI 逻辑与数据逻辑分离,使代码更易于维护和测试。生命周期感知:ViewModel 的生命周期与 Activity 或 Fragment 的生命周期相关联,但不会因为配置更改而被销毁。
2025-03-05 18:52:42
849
原创 Jetpack Lifecycle
Lifecycle是Android Jetpack中一个强大的工具,它帮助开发者更好地管理组件的生命周期,提升代码质量和应用性能。通过解耦生命周期逻辑,开发者可以更专注于业务实现,同时避免常见的生命周期管理问题。
2025-03-04 20:32:56
888
原创 Android基础面试简答题
1、进程间通信方式 (1)handler实现进程间通信 (2)使用AsyncTask (3)直接在子线程中使用runOnUiThread(Runnable) (4)使用post()和postDelay() (5)EventBus实现线程间的通信 2、运行时权限和文件系统权限 运行时 Dalvik( android授权) ,Android程序执行需要读取到安全敏感项必需在androidm
2017-09-27 21:08:38
616
原创 Volley网络框架详解
1、Volley简介 volley是在2013年Google I/O 上发布的网络通信库,它的使用场景:数据量小通信频繁。2、Volley的优缺点 (1)volley的优点适合进行数据量小,但通信频繁的网络操作可以直接在主线程调用服务端并处理返回结果可以取消请求、容易扩展,面向接口编程网络请求线程NetworkDispatcher默认开启了4个,可以优化,通过手机CPU数量通过使用标准
2017-09-14 13:03:23
917
原创 Fragment详解
一、Fragment为什么被称为第五大组件? 1、在使用频率上,Fragment是不输于其它四大组件的,它有自己的生命周期,灵活动态地加载到activity中去,所以说是第五大组件 2、Fragment加载到activity的两种方式 (1)添加fragment到activity的布局文件 (2)动态在activity中添加fragment 步骤1:添加一个FragmentTran
2017-08-22 16:47:48
762
原创 activity基础知识详解
activity是我们最熟悉的四大组件之一,主要通过一下3个方面介绍:1、activity生命周期(在面试的时候多多少少都会被问到)2、Android任务栈3、Scheme跳转协议一、activity生命周期 1、activity的4种状态 (1)running:activity处于栈顶,处于活动状态,用户点击屏幕,屏幕可以做出响应 (2)paused:失去焦点,用户点击屏幕没有
2017-08-22 09:42:25
1638
原创 Binder详解
在介绍Binder之前,先了解一下Linux内核的基础知识,主要有三个知识点: 1、进程隔离/虚拟地址空间 2、系统调用 3、binder驱动 下面开始学习binder 一、什么是binder 1、通常意义下,binder指的是一种通信机制 2、对于server进程来说,binder指的是binder本地对象;对于client来说,binder指的是binder代理对象。 3、对于传
2017-08-18 11:32:51
1258
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人