《第一行代码》阅读笔记 (1)

一、Android系统架构

1.Linux内核层

Android系统是基于Linux 2.6内核的,这一层为Android设备的各种硬件提供了底层的驱动, 如显示驱动、 音频驱动、 照相机驱动、 蓝牙驱动、Wi-Fi驱动、 电源管理等。

2.系统运行库层

这一层通过一些C/C++库来为Android系统提供了主要的特性支持。 如SQLite库提供了数据库的支持,OpenGL/ES库提供了3D绘图的支持,Webkit库提供了浏览器内核的支持等。同样在这一层还有Android运行时库, 它主要提供了一些核心库, 能够允许开发者使用Java语言来编写Android应用。另外Android运行时库中还包含了Dalvik虚拟机,它使得每一个Android应用都能运行在独立的进程当中, 并且拥有一个自己的Dalvik虚拟机实例。相较于Java虚拟机,Dalvik是专门为移动设备定制的,它针对手机内存、CPU性能有限等情况做了优化处理。

3.应用框架层

这一层主要提供了构建应用程序时可能用到的各种API,Android自带的一些核心应用就是使用这些API完成的, 开发者也可以通过使用这些API来构建自己的应用程序。

4.应用层

所有安装在手机上的应用程序都是属于这一层的, 比如系统自带的联系人、 短信等程序,或者是你从Google Play上下载的小游戏,当然还包括你自己开发的程序。

《第一行代码》阅读笔记 (1)_第1张图片
Android架构图

二、Android四大组件

Android系统四大组件分别是活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver) 和内容提供器(Content Provider)。 其中活动是所有Android应用程序的门面,凡是在应用中你看得到的东西, 都是放在活动中的。 而服务就比较低调了, 你无法看到它, 但它会一直在后台默默地运行, 即使用户退出了应用, 服务仍然是可以继续运行的。广播接收器可以允许你的应用接收来自各处的广播消息, 比如电话、 短信等, 当然你的应用同样也可以向外发出广播消息。内容提供器则为应用程序之间共享数据提供了可能,比如你想要读取系统电话簿中的联系人,就需要通过内容提供器来实现。

三、活动(Activity)

Intent:Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent一般可被用于启动活动、启动服务、 以及发送广播等场景。

Intent分为显示Intent与隐式Intent。

四、活动的生命周期

返回栈


《第一行代码》阅读笔记 (1)_第2张图片

五、活动状态

运行状态当一个活动位于返回栈的栈顶时, 这时活动就处于运行状态。 系统最不愿意回收的就是处于运行状态的活动,因为这会带来非常差的用户体验。

暂停状态:当一个活动不再处于栈顶位置, 但仍然可见时, 这时活动就进入了暂停状态。处于暂停状态的活动仍然是完全存活着的, 系统也不愿意去回收这种活动(因为它还是可见的,回收可见的东西都会在用户体验方面有不好的影响),只有在内存极低的情况下,系统才会去考虑回收这种活动。

停止状态:当一个活动不再处于栈顶位置, 并且完全不可见的时候, 就进入了停止状态。 系统仍然会为这种活动保存相应的状态和成员变量, 但是这并不是完全可靠的, 当其他地方需要内存时,处于停止状态的活动有可能会被系统回收。

销毁状态:当一个活动从返回栈中移除后就变成了销毁状态。 系统会最倾向于回收处于这种状态的活动,从而保证手机的内存充足。

六、活动生存周期

《第一行代码》阅读笔记 (1)_第3张图片

七、活动启动模式

启动模式一共有四种,分别是standard、singleTop、singleTasksingleInstance, 可以在AndroidManifest.xml通过给标签指定android:launchMode属性来选择启动模式。

standard是活动默认的启动模式,在不进行显式指定的情况下,所有活动都会自动使用这种启动模式。 因此, 到目前为止我们写过的所有活动都是使用的standard模式。 在standard模式(即默认情况)下,每当启动一个新的活动,它就会在返回栈中入栈,并处于栈顶的位置。对于使用standard模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。

当活动的启动模式指定为singleTop, 在启动活动时如果发现返回栈的栈顶已经是该活动, 则认为可以直接使用它,不会再创建新的活动实例。

当活动的启动模式指定为singleTask, 每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例, 如果发现已经存在则直接使用该实例, 并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。

singleInstance在这种模式下会有一个单独的返回栈来管理这个活动, 不管是哪个应用程序来访问这个活动, 都共用的同一个返回栈, 也就解决了共享活动实例的问题。

《第一行代码》阅读笔记 (1)_第4张图片
singleInstance原理

你可能感兴趣的:(《第一行代码》阅读笔记 (1))