Cricket 2019-06-26
Binder系列第一篇:《从getSystemService()开始,开撸Binder通讯机制》http://www.jianshu.com/p/1050... Binder系列第二篇:《能用【白话文】来分析Binder通讯机制?》http://www.jianshu…
终于要开始讲解 Activity 的启动流程了,Activity 的启动流程相对复杂一下,涉及到了 Activity 中的生命周期方法,涉及到了 Android 体系的 CS 模式,涉及到了 Android 中进程通讯 Binder 机制等等
Binder系列第一篇:《从getSystemService()开始,开撸Binder通讯机制》http://www.jianshu.com/p/1050... Binder系列第二篇:《能用【白话文】来分析Binder通讯机制?》http://www.jianshu…
Android系统当中的Binder消息传递无处不在,从运行一个新应用到发送一个常见的TIME PICK广播,再到注册一个ContentObserver去监听短信数据的变化,这些功能都需要使用到Binder通信。正如”凡人必有一死”,system_server进程虽然只要手机保持开机状态就会存在,但是普通应用无论优先级多么高,当系统内存匮乏、用户手动杀死应用进程又或者是应用出现不能解决的BUG直接Force Close了。这时,作为进程通信服务端的应用既然死亡了,那么对应的客户端相应的服务端之前保存下来的数据就没有必要保存了。否则的话,应用生老病死之间,如果手机一直不关机,system_server一直在存活期间也不清除死亡进程的遗留信息,那么这样的手机系统使用起来会造成内存泄露,系统资源会慢慢被耗尽直至用户能察觉到的系统卡顿出现。
按计划本来从这章开始写四大组件的启动过程的,但是看看源码结构发现为了说的更明白还是先写一点系统framework层启动的内容,帮助理解四大组件的启动以及管理过程。我们知道四大组件管理是通过一些服务以及线程实现的,所以先把一些基本概念弄清楚比较好,比如AMS(ActivityMa…
Binder 是 Android 系统进程间通信(IPC)方式之一。Linux 已经拥有管道,system V IPC,socket 等 IPC 手段,却还要倚赖 Binder 来实现进程间通信,说明 Binder 具有无可比拟的优势。深入了解 Binder 并 将之与传统 IPC 做对比有助于我们深入领会进程间通信的实现和性能优化。本文将对 Binder 的设计细节做一 个全面的阐述,首先通过介绍 Binder 通信模型和 Binder 通信协议了解 Binder 的设计需求;然后分别阐 述 Binder 在系统不同部分的表述方式和起的作用;最后还会解释 Binder 在数据接收端的设计考虑,包括 线程池管理,内存映射和等待队列管理等。通过本文对 Binder 的详细介绍以及与其它 IPC 通信方式的对比, 读者将对 Binder 的优势和使用 Binder 作为 Android 主要 IPC 方式的原因有深入了解。
本篇文章主要讨论窗口坐标系统、Z序确定,Choreographer、WindowToken、WindowState、WindowManagerService中的关键成员等知识。
由于四大组件的启动都涉及到进程的启动,因此我们这章先讲一下进程启动流程,然后再讲四大组件的启动流程。 基础知识 Android应用程序框架层创建的应用程序进程具有两个特点,一是进程的入口函数是ActivityThread.main,二是进程天然支持Binder进程间通信机制;这…
深入讲解 Android 的 Binder 机制
分析这个过程不是单纯为跟一遍函数调用的流程,而是更好的理解平常用到的一些方法、对象的初始化时间,对象创建的个数,方法的先后顺序,以及每个类,方法背后的作用和目的。
相关文章 Android系统启动流程系列 Android应用进程系列 Android深入四大组件系列 Android深入解析AMS系列 前言 关于AMS,原计划是只写一篇文章来介绍,但是AMS功能繁多,一篇文章的篇幅远远不够。这一篇我们接着来学习与AMS相关的ActivityTa…
此前我用多篇文章介绍了WindowManager,这个系列我们来介绍WindowManager的管理者WMS,首先我们先来学习WMS是如何产生的。本文源码基于Android 8.0,与Android 7.1.2相比有一个比较直观的变化就是Java FrameWork采用了Lam…
直观地探述 Window、Activity、View 之间的关系
Android Binder 机制是安卓应用运行的基础,一个应用的运行需要无法避免地和系统提供的 Binder 做交互。Android 系统以服务(Service)的方式暴露出很多 Binder 对象,准确的说我们拿到的是 Binder 代理对象(BinderProxy),真正的 Binder 对象运行于安卓系统进程中(system_process)。我们的应用以夸进程的方式调用系统提供的各种服务,通常以 Context.getSystemService() 的方式获取系统服务,常见的有 ActivityManager, AlarmManager, InputMethodManager, ConnectivityManager, LayoutInflater 等等,其中有一部分是普通对象,大部分是对系统 Binder 对象的封装。那应用又是如何拿到系统的 Binder 对象的呢?如果我们要拿到其他应用进程的 Binder 对象一般会使用 ServiceConnection 连接其他进程的 Service 拿到 IBinder。然而系统的 IBinder 是用 ServiceManager 暴露给应用进程的。下面以获取 InputMethodManager 为例分析应用是如何获取系统 IBinder 对象的。
scrollTo和scrollBy只是移动自己的内容. 也就是如果ViewGroup设置scrollTo或者scrollBy的话,只有它的子View会有位移效果.如果是TextView设置scrollTo或者scrollBy的话只会让它内部的文字发生位移. scrollBy还是…
阅读Android源码的好处有很多,可以加深我们对系统的了解,可以参考牛人优雅的代码实现,可以从根本上找出一些bug的原因...我们应该庆幸Android是开源的,所有的功能都可以看到实现,所有的bug都能追踪溯源。 我想大家或多或少听说过Android源码开源项目,即AOSP…
窗口管理可以说是Android系统中最复杂的一部分,主要是它涉及的模块比较多,虽然说是窗口管理,但除了WindowManagerService还包括SurfaceFlinger服务、Linux的共享内存及tmpfs文件系统、Binder通信、InputManagerService…
之前分析说过,WindowManagerService只负责窗口管理,并不负责View的绘制跟图层混合,本文就来分析WMS到底是怎么管理窗口的。初接触Android时感觉:Activity似乎就是Google封装好的窗口,APP只要合理的启动新的Activity就打开了新窗口,这…
从问题出发,往往能更明确的找到所求。本文将带着一个个的问题,结合源码,逐步解析Activity、Window、View的三者关系。
ActivityManagerService 在 Android 系统中扮演着极其重要的角色,主要的作用就是通过进程间通信的方式来调度 Activity 的生命周期,本文对于这部分有着较为详细的描述,希望这篇文章能够帮你了解一些 framework 层的知识。