Android应用启动流程

前言|背景为什么要总结这个 前一段时间面试被年哥问到了和这个问题相关的一个问题(Android中有没有类似于Java中main方法?)当时当然没有答案,就回答不知道。 在看《Android开发艺术探索》的第一章节中从源码分析Android中Activity的生命周期。 《Android开发艺术探索》第一章里怎么讲Activity的启动过程的源码相当复杂,涉及Instrumentation、ActivityThread和ActivityManagerService(AMS)。这里不详细分析这一过程,简单理解,启动Activity的请求会由Instrumentation来处理,然后通过Binder向AMS发请求,AMS内部维护者一个ActivityStack并负责栈内的Activity的状态同步,AMS通过ActivityThread去同步Activity的状态从而完成生命周期方法的调用。 以下内容摘自老罗的Android之旅中的一篇博文 老生常谈 Activity启动在Android系统中,有两种操作会引发Activity的启动,一种用户点击应用程序图标时,Launcher会为我们启动应用程序的主Activity;应用程序的默认Activity启动起来后,它又可以在内部通过调用startActvity接口启动新的Activity,依此类推,每一个Activity都可以在内部启动新的Activity。通过这种连锁反应,按需启动Activity,从而完成应用程序的功能。Activity的启动方式有两种,一种是显式的,一种是隐式的,隐式启动可以使得Activity之间的藕合性更加松散。     继续阅读
MXlwq's avatar
MXlwq 8月 25, 2016
 | 

Android应用启动流程

前言|背景为什么要总结这个 前一段时间面试被年哥问到了和这个问题相关的一个问题(Android中有没有类似于Java中main方法?)当时当然没有答案,就回答不知道。 在看《Android开发艺术探索》的第一章节中从源码分析Android中Activity的生命周期。 《Android开发艺术探索》第一章里怎么讲Activity的启动过程的源码相当复杂,涉及Instrumentation、ActivityThread和ActivityManagerService(AMS)。这里不详细分析这一过程,简单理解,启动Activity的请求会由Instrumentation来处理,然后通过Binder向AMS发请求,AMS内部维护者一个ActivityStack并负责栈内的Activity的状态同步,AMS通过ActivityThread去同步Activity的状态从而完成生命周期方法的调用。 以下内容摘自老罗的Android之旅中的一篇博文 老生常谈 Activity启动在Android系统中,有两种操作会引发Activity的启动,一种用户点击应用程序图标时,Launcher会为我们启动应用程序的主Activity;应用程序的默认Activity启动起来后,它又可以在内部通过调用startActvity接口启动新的Activity,依此类推,每一个Activity都可以在内部启动新的Activity。通过这种连锁反应,按需启动Activity,从而完成应用程序的功能。Activity的启动方式有两种,一种是显式的,一种是隐式的,隐式启动可以使得Activity之间的藕合性更加松散。     继续阅读
MXlwq's avatar
MXlwq 7月 21, 2016
 | 

Android Context

总结备注:数字1: 启动Activity在这些类中是可以的,但是需要创建一个新的task。一般情况不推荐。数字2: 在这些类中去layout inflate是合法的,但是会使用系统默认的主题样式,如果你自定义了某些样式可能不会被使用。数字3: 在receiver为null时允许,在4.2或以上的版本中,用于获取黏性广播的当前值。(可以无视)注: ContentProvider、BroadcastReceiver之所以在上述表格中,是因为在其内部方法中都有一个context用于使用。 说明几个问题什么是ContextContext字面意思上下文,或者叫做场景,也就是用户与操作系统操作的一个过程,比如你打电话,场景包括电话程序对应的界面,以及隐藏在背后的数据。Activity、Service、Application都是Context的子类;也就是说,Android系统的角度来理解:Context是一个场景,代表与操作系统的交互的一种过程。从程序的角度上来理解:Context是个抽象类,而Activity、Service、Application等都是该类的一个实现。在仔细看一下上图:Activity、Service、Application都是继承自ContextWrapper,而ContextWrapper内部会包含一个base context,由这个base context去实现了绝大多数的方法。     继续阅读
MXlwq's avatar
MXlwq 7月 08, 2016
 |