猫侠的小窝

一步一步,盖个大房子……

广播组件

广播组件

基于发布 / 订阅事件模型。发布 / 订阅事件模型由消息订阅者、消息发布者、消息中心构成。 广播分为本地广播和全局广播。 本地广播 进程内通信,不可跨进程。 消息订阅者:BroadcastReceiver。 消息发布者:任何地方都可以发布广播。 消息中心:LocalBroadcastManager。 注意控制BroadcastReceiver的生命周期,应与所对应的A...

Service组件

Service组件

启动 startService() 启动服务,服务可在后台无限期运行,即使启动服务的组件已被销毁也不受影响,除非手动调用才能停止服务,启动服务的组件只能用广播与服务交互; bindService()绑定服务,绑定到该服务的组件可以与服务交互,当全部解绑时,服务停止。 生命周期 onCreate():当Service第一次实例化时被调用; onStartCommand():每次...

Activity组件

Activity组件

生命周期 完整生命周期 onCreate()/onRestart() -> onStart() -> onRestoreInstanceState() -> onPostCreate() -> onNewIntents() -> onActvityResults() -> onResume() -> onPause() -> onSaveIns...

ActivityManagerService

ActivityManagerService

简介 AMS运行于SystemServer进程。负责管理全局的“窗口”、“应用服务”、“内容提供者”、“广播接收者”组件。同时它作为组件和应用进程的桥梁,使得开发者不必管理应用进程的创建与结束。 启动后的准备工作 获取SystemServer的Context和ActivityThread作为AMS的运行环境; 创建ServiceThread线程和对应的MainHandler;即工...

SystemServer进程

SystemServer进程

简介 SystemServer进程是Java层的第二个进程。其中运行着所有Java层的系统服务,并管理着这些服务的“服务端”。 启动后的准备工作 对比应用进程,可以看出是很相似的。 在ZygoteInit.handleSystemServerProcess()中。 关闭从Zygote那里继承下来的Socket; 设置一些进程参数; 做些常规初始化; 在Native层启...

ServiceManager进程

ServiceManager进程

简介 ServiceManager进程是由init进程创建的。源码文件是service_native.c。它是Native层的、系统全局“服务端”的管理者。 每个应用进程和SystemServer进程都有1个ServiceManager对象。它以单例模式封装了ServiceManagerNative对象,提供对系统服务的“服务端”的缓存,并封装了向ServiceManager进程申请“服务...

Zygote进程

Zygote进程

简介 Zygote进程由Kernel层init进程创建,是Android Java层第1个进程。所对应的可执行程序是app_process,所对应的源文件是App_main.cpp。Zygote进程启动后,会启动AndroidRunTime组件、fork出SystemServer进程及各种应用进程。 启动后做了些什么? 注册Java虚拟机,并设置虚拟机相关参数; 注册一些JNI函...

Java内存模型

Java内存模型、GC

内存模型 程序计数器:线程私有。记录当前线程运行到了哪条指令。 虚拟机栈:线程私有。执行一个Java方法,会创建一个栈帧并入栈,方法执行完栈帧出栈。栈帧中记录着方法的相关信息,比如本地变量表、操作栈、动态链接、方法出口等。 本地方法栈:线程私有。工作原理与虚拟机栈相同,不同的是它对应Native方法。 堆区:线程共享。存放实例对象。 方法区:线程共享。存放已经被虚拟机加...

Java泛型

Java泛型

声明 泛型方法 在方法返回类型之前添加类型参数声明;每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。 泛型类/接口 在类名/接口名后面添加了类型参数声明。 使用场景 泛型方法定义了一个“对几种对象的相同操作“。相比在父类中声明方法的做法,有更明确的意义和更好的解耦性。比如ArrayList...

Java集合包

List、Set、Map、Queue、Deque

整体架构 基础的定义接口有5个: List 是有序的,可以重复的元素的线性表。 Queue 对线性表的访问加以控制,一端入、一端出、先入先出。 Deque 同样是对线性表的访问加以控制,两端都可以出入、先入先出。 Map 是不重复的键值对。 Set 是不重复的数据集合。 在实现时,考虑几个特性: 无序/有序的线形表/有序的树; 顺序储存/链式储存; ...