Android开发艺术探索笔记 第九章 四大组件的工作过程

本篇幅要讲讲四大组件,这也是我们再熟悉不过的,分别是Activity,Service,BroadcastReceiver,ContentProvider,怎么使用我们这里就不多赘述了,我们本篇主要是讲他们的执行流程和工作原理,也让我们更加的了解他们,所以本章的侧重点在于四大组件的工作过程分析,通过分析他们的工作过程我们可以更好的理解系统内部运行机制,这也有助于我们对系统有一个更加深入的了解。

一.四大组件的运行状态
四大组件当中,除了广播,其余三者都需要在清单文件中注册,对于BroadcastReceiver来说,他既可以静态注册,也可以动态注册,而在调用方式上,除了ContentProvider其他都需要借助Intent

Activity是一种展示型组件,用于向用户直接展示一个UI,在用户眼里,他只有UI的一个概念,其他的三个组件,并不需要认知,Activity用Intent启动,可以用显示意图指定某个Activity或者多个Activity,也可以用隐式意图处理,一个Activity也存在多种的启动模式,这在我们之前就已经讲过,所以,就不多说了。停止一个Activity调用finish即可。
Service用于处理后台,用户不需要感知,并且他有两种状态,分别是启动状态和绑定状态,,Service在启动的时候,可以做一些后台逻辑并且不需要与外界交互,但是他仍然运行在主线程中,所以尽量不要耗时,当Service处于绑定状态的时候,他的内部同样可以做处理,并且还可以与外部交互,Service线稿停止的话就需要先stopService并且unBindServiceBroadcastReceiver是一种消息型组件,我们俗称广播,用于在不同的组件中或者应用中传递消息,他同样无法被用户感知,开头就说了,他有两种注册方式,静态和动态,静态的话只需要在清单文件即可,应用启动后会自动接听该广播,动态的话需要调用Context中的注册方法,如果不想用了还需要解除注册,如果应用不启动责会收不到,发送广播则是用过Context一系列的send方法,发动和接收的过程是匹配intent-filter来描述的,可以发现,广播这个组件可以实现低耦合的观察者模式,观察者和被观察者可以没有任何的耦合,由于广播的特殊性,他也不适合来做耗时的操作,并且他没有停止的概念
ContentProvider是一种数据共享的组件,用于和其他应用共享数据,和广播一样,他也无法被用户感知,对于一个ContentProvider来说,他的内部需要实现增删查改四个操作,在他的内部维持着易芬数据集合,这个数据集合既可以通过数据库来实现,也可以采用其他类型的实现,比如List和Map,不过要注意的是增删查改需要处理好线程同步,因为这几个方法是在Binder线程池中调用的,另外他也不需要手动停止。

二.Activity的工作过程
系统对Activity做了很多的封装处理,所以让Activity的调用过程变得异常简单,我们只需要

Intent intent = new Intent(this, TestActivity.class);
startActivity(intent);
通过上面的代码就可以启动一个TestActivity了,然后新的Activity就展示在用户的界面,这个过程对于我们开发来讲真的再熟悉不过了,这也是很理所当然的事情,但是你有没有想过,系统内部到底是怎样去启动这个TestActivity,比如新的Activity对象实在何时创建的,onCreate又是在何时调用的,可能很多人并不会去关心,在日常开发中确实这些不需要我们知道,但是如果你想在技术的领域更上一层楼,就很有必要知道系统的工作原理了。
我们从activity的startactivity开始分析 startactivity有好几个重载的方法,但是他们

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章