Gityuan

Keep on going never give up

[置顶]Android系统开篇

基于Android 6.0的源码,专注于分享Android系统原理、架构分析的原创文章,这是Android系列文章的开篇。

AMS总结(二)

从另一个维度,简要总结下四大组件的超时统计区间,以及Handler情况。 一. 组件超时统计 1.1 Service 序号 App端方法 生命周期 计时起点 计时终点 1 AT.handleCreateService onCreate...

全面剖析SharedPreferences

一. 概述 SharedPreferences(简称SP)是Android中很常用的数据存储方式,SP采用key-value(键值对)形式, 主要用于轻量级的数据存储, 尤其适合保存应用的配置参数, 但不建议使用SP 来存储大规模的数据, 可能会降低性能. SP采用xml文件格式来保存数据, 该文件所在目录位于/data/data//shared_prefs/ 1.1 使用示例 Sh...

四大组件之ActivityRecord

一. 引言 BroadcastRecord,ServiceRecord都继承于Binder对象,而ActivityRecord并没有继承于Binder。 但ActivityRecord的成员变量appToken的数据类型为Token,Token继承于IApplicationToken.Stub。 appToken:system_server进程通过调用scheduleLaunchActi...

四大组件之ContentProviderRecord

一. 引言 作为四大组件之一的ContentProvider,相比来说是设计得稍逊色,有些地方不太合理,比如provider级联被杀, 请求provider时占用system_server的binder线程来wait()等。 即便很少自定义ContentProvider,但你也可以会需要使用到ContentProvider,比如通信录,Settings等; 使用Provider往往跟数据...

四大组件之BroadcastRecord

一. 引言 广播在Android系统使用频率比较高,广播的使用场景往往是在满足某种条件下发出一个事件(broadcast), 多处(Receiver)可以监听该事件通知并做出相应的改变。比如亮/灭屏,网络状态切换等事件发送时都会发出相应的广播。 LoadedApk ReceiverDispatcher InnerReceiver extends IIntentRe...

四大组件之ServiceRecord

一. 引言 Android系统中最为重要的服务便是AMS, AMS管理着framework层面四大组件和进程. 本文从另一个维度 来说一说四大组件之一的Service. 每个app进程运行的Service, 对应于system_server进程中AMS的ServiceRecord对象. 也就是说所有app进程的Service, 都会记录在system_server进程, 好比一个大管家. ...

四大组件之综述

本文基于Android 6.0的源代码,来分析四大组件的管理者AMS frameworks/base/services/core/java/com/android/server/am/ - ActivityManagerService.java - ProcessRecord - ActivityStackSupervisor.java - ActivitySta...

LocalBroadcastManager原理分析

一. 概述 当不需要通过send broadcasts来完成跨应用的通信,那么建议采用LocalBroadcastManager, 将会是更加地高效、安全地方式,并且对系统带来的影响也是更小。 BroadcastReceiver采用的binder方式实现跨进程间的通信; LocalBroadcastManager使用Handler通信机制。 1.1 使用实例 //1. 自...

简述Activity与Window关系

一. 概述 AMS是Android系统最为核心的服务之一,其职责包括四大核心组件与进程的管理,而四大组件中Activity最为复杂。 其复杂在于需要跟用户进行UI交互(涉及Window),WMS其主要职责便是窗口管理,还有跟App,SurfaceFlinger等 模块间相互协同工作。简而言之: App主要是具体的UI业务需求 AMS则是管理系统四大组件以及进程管理,尤其是Act...

理解Android Context

一. 概述 接触过Android的小伙伴, 一定不会对Context感到陌生, 有大量的场景使用都离不开Context, 下面列举部分常见场景: 启动Activity (startActivity) 启动服务 (startService) 发送广播 (sendBroadcast), 注册广播接收者 (registerReceiver) 获取ContentResolver...