- 博客(12)
- 收藏
- 关注
原创 ActivityManagerService解析(一)AMS相关类简介
ActivityManagerService(简称AMS)是Android三大核心的功能之一(其他两个是View,WindowManagerService),它的代码庞大(约2万行),逻辑纷繁,主要负责系统中四大组件的启动、切换、调度及应用程序进程的管理和调度等工作。对于这样庞大复杂的代码,我们应该从它的功能角度出发,分析它的每个功能对应的代码逻辑,逐个突破。 ActivityMana...
2018-02-11 16:26:27 869 1
原创 Binder机制全解(三)Binder 内存映射
Binder机制牵涉到进程的内核空间地址和用户空间地址,所以这里先简单介绍一下Linux进程中的内存管理的概念。内存通常被组织为一个由N个连续的字节大小的单元组成的数组,每个字节都有一个唯一的物理地址,作为到数组的索引。CPU访问内存最简单直接的方法就是使用物理地址,这种寻址方式被称为物理寻址。但是,在现代操作系统中,处理器使用的是一种称为虚拟寻址的寻址方式。使用虚拟寻址,CPU在获得虚拟...
2018-02-11 16:13:05 2405
原创 Binder机制全解(二)Binder跨进程原理
上文给出了Binder的通信模型,指出了通信过程的四个角色: Client, Server, SM, driver,并且说了Client持有远程进程中某个Service对象的引用,然后调用引用类中的方法,远程进程的方法就执行了。我们都知道,不同的进程之间是不共享资源的,也就是说,客户端持有的这个对象跟远程进程中的实际对象完全是两个不同的对象。事实上,Binder跨进程传输并不是真的把一个对...
2018-02-11 16:07:53 501
原创 Binder机制全解(一)Binder通信模型
Binder是Android系统提供的一种IPC(进程间通信)机制,它的英文翻译是“粘合剂”,正如其名,它可以将系统各个进程粘合在一起,这样我们就可以使用其他进程提供的各种服务,整个系统仿佛运行于同一个程序之中。Android系统的四大组件,ActivityManagerService,PackageManagerService等系统服务无一不与Binder挂钩,它是系统间各个组件通信...
2018-02-11 16:01:17 799
原创 Handler消息机制全解(四)消息的处理
当线程被唤醒了后,在next()方法中也返回了一个需要处理的消息, 此时会回到 Looper的 loop()方法的调用处,于是 loop方法会得到这个消息后,会调用这个消息中target对象的dispatchMessage方法来处理这个消息。下面来看看Handler的dispatchMessage方法是如何处理这个消息的。public class Handler { ........
2018-02-11 15:51:49 711
原创 Handler消息机制全解(三)消息的发送
Android系统提供了 一 个Handler类,用来向 一 个线程的消息队列发送一 个消息并处理消息,Handler类内部有mLooper和mQueue两个成员变量,它们分别指向 一 个Looper对象和 一 个MessageQueue对象。创建的Handler中mLooper和mQueue属于哪个线程,那么,其发送的消息和处理消息也就属于哪个线程的。所以我们可以在一个Thread中同时...
2018-02-11 15:48:56 269
原创 Handler消息机制全解(二)消息的睡眠等待
在上面的分析中,我们知道loop()方法会循环调用MessageQueue的next()方法来获取要处理的消息,并且会在改方法处睡眠等待,那么是如何睡眠的呢,让我们来分析next()方法中的原理,下面是MessageQueue类中的相关核心代码。public final class MessageQueue { ...... // True if the message q...
2018-02-11 15:37:32 795
原创 Handler消息机制全解(一)消息机制的创建
进程是应用程序的一个运行活动过程,是操作系统资源管理的实体,也就是操作系统分配资源的最小单元,比如系统内存、代码、数据、CPU时间片等资源,为正在运行的应用程序提供运行环境。 每个进程都有自己独立的资源和内存空间,其它进程不能任意访问当前进程的内存和资源,并且系统给每个进程分配的内存会有限制。 线程是进程内部执行代码的实体,它是CPU调度资源的最小单元,一个进程至少包括一个主线程(进...
2018-02-11 15:35:19 195
原创 Context完全解析(四)Service的Context创建过程
当请求启动一个服务时,ActivityManagerService 首先会通过IPC调用到ActivityThread的scheduleCreateService()方法中,该方法的参数中有一个是Servicelnfo类参数,它是实现了 一 个Parcelable接口的数据类,该对象由AmS创建,并通过IPC传递到ActivityThread内部。 在scheduleCreateServi...
2018-02-11 15:16:58 1947
原创 Context完全解析(三)Activity的Context创建过程
请求启动一个Activity时,ActivityManagerService 会通过IPC调周到ActivityThread类的scheduleLaunchActivity()方法。public final class ActivityThread { ...... private class ApplicationThread extends IApplicationThread...
2018-02-11 15:13:27 431
原创 Context完全解析(二)Application的Context创建过程
Android应用由四大组件组成,组件的运行要有一个完整的Android工程环境,在这个环境下,Activity、Service等系统组件才能够正常工作。如果我们手动通过new的方式来创建这些组件,那么这些组件是不能正常工作的,因为他们需要一个运行环境Context,而这个Context的构造过程是由系统帮我们完成的。 应用程序在以下几种情况下会创建一个Context实例:(1)创...
2018-02-11 15:08:22 1130
原创 Context完全解析(一)什么是Context?
Context字面意思是上下文环境,它是一个抽象类,定义很多访问应用程序环境中全局信息的接口,其正在的实现是在ContextImpl类中。通过它可以访问应用程序的资源和相关的类,比如:Resources,AssetManager,Package,权限等相关信息;以及调用应用程序级的操作,比如:启动Activity,启动Service,发送广播,接收Intent等。 下面是Context...
2018-02-11 15:01:57 24533
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人