很久没有更新文章了,请大家原谅。今天我们继续来学习Android的四大组件,了解Android四大组件可以对Android程序有个总体了解,任何一个Android APP都建立在四大组件之上。四大组件即:activity(界面)、service(服务)、Broadcast Receiver(广播接收器)、Content Provider(内容提供者),还有一个连接他们的桥梁 Intent,下面我们就来一一说明。
- Activity(界面)
简单来说Activity即我们能看到的手机界面窗口,一个Activity就是一个手机屏幕显示的页面,页面上面有文字、图片、按钮等,可以展示不同的信息,可以实现和我们交互。一个APP由多个activity组成,页面的跳转都是显示的不同的activity,每个activity都是各自独立的。一个页面是有生命的,及页面创建、显示、消失等。这个就要说到Activity的生命周期了。下面这张图片引用Android官网,说明的一个activity的生命周期。
Android生命周期
如上图所示是一个activity的生命周期图,我们来一一解释。
- onCreate():Activity第一次被创建的时候调用此方法,可以做一些页面初始化的事情。
- onStart():Activity被显示到屏幕上的时候调用此方法。
- onResume():Activity可见,这个时候我们就已经能看到手机页面显示的信息了,也能和页面进行交互了。
- onRestart():Activity被停止后又被再次启动之前调用此方法,接着将调用onResume()方法.
- onPause():Activity不可见。比如第一个Activity通过Intent启动第二个Activity的时候,将调用第一个Activity的onPause()方法,这个时候第一个Activity不可见了,然后调用第二个Activity的onCreate()——>onStart()——>onResume()方法,接着调用第一个Activity的onStop()方法。如果Activity重新获得焦点,则将调用onResume()方法;如果此Activity进入用户不可见状态,那么将调用onStop()方法。
- onStop():Activity停止。第一个Activity被第二个Activity完全覆盖,或者被销毁的时候回调用此方法。如果此Activity还会与用户进行交互,将调用onRestart方法();如果此Activity将被销毁,那么将调用onDestroy()方法。
- onDestroy():Activity被销毁之前调用此方法,或者是调用finish()方法结束Activity的时候调用此方法,可以在此方法中进行释放资源,保存数据等操作。
既然Activity就是手机显示的页面,那么界面上面显示些什么信息,在那里显示,图片放到哪里,文字放到哪里,按钮放哪里,这些都是我们自己控制了,这就要说到界面布局。我们将在下一篇文章介绍。
- Service(服务)
Service(服务)是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件。服务可由其他应用组件启动(如Activity),service也是运行在主线程中的后台程序,和activity一样不可进行耗时操作,普通service不可与用户进行交互,服务需要在manifests中配置,service有两种启动方式,startService()和bindService()。startService()启动的服务必须调用stopService()才能停止服务。bindService()启动的服务,调用者销毁,服务也随之销毁。服务和activity一样也是有生命周期的。
service生命周期
onCreate()
如果service没被创建过,调用startService()后会执行onCreate()回调;如果service已处于运行中,调用startService()不会执行onCreate()方法。也就是说,onCreate()只会在第一次创建service时候调用,多次执行startService()不会重复调用onCreate(),此方法适合完成一些初始化工作。
onStartCommand()
如果多次执行了Context的startService()方法,那么Service的onStartCommand()方法也会相应的多次调用。onStartCommand()方法很重要,我们在该方法中根据传入的Intent参数进行实际的操作,比如会在此处创建一个线程用于下载数据或播放音乐等。
onBind()
Service中的onBind()方法是抽象方法,Service类本身就是抽象类,所以onBind()方法是必须重写的,即使我们用不到。当一个组件想通过调用 bindService() 与服务绑定时,系统将调用此方法。
onDestory()
当服务不再使用且将被销毁时,系统将调用此方法,这是服务接收的最后一个调用,在此方法中应清理占用的资源。
- Broadcast Receiver(广播接收器)
Android四大组件之一,用于不同组件或者多线程之间的通信。Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者。我看可以监听系统发出的广播也可以监听自己程序发出的广播。系统广播有来电话、来短信、系统启动等。广播接收器有两种注册方式。静态注册和动态注册。静态注册需要在manifests中配置,接收器一旦注册,不管程序是否已经启动都能监听到广播。动态注册则字程序中动态注册,一般是在onResume()注册,onPause()注销,销毁的话会导致内存泄漏,所以动态注册的广播接收器一定要记得注销掉。
- Content Provider(内容提供者)
ContentProvider内容提供者(四大组件之一)主要用于在不同的应用程序之间实现数据共享的功能。URI(统一资源标识符),唯一标识 ContentProvider & 其中的数据,URI分为 系统预置 & 自定义,分别对应系统内置的数据(如通讯录、日程表等等)和自定义数据库。ContentProvider内容提供者 和sqlite 数据库一样可以实现增删改查功能。
- Intent
Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。Intent由以下各个组成部分: component(组件):目的组件;action(动作):用来表现意图的行动;category(类别):用来表现动作的类别;data(数据):表示与动作要操纵的数据;type(数据类型):对于data范例的描写;extras(扩展信息):扩展信息;Flags(标志位):期望这个意图的运行模式;Intent类型分为显式Intent(直接类型)、隐式Intent(间接类型)。官方建议使用隐式Intent。上述属性中,component属性为直接类型,其他均为间接类型。
好了,今天我们就介绍到这里,今天我们只是介绍了Android四大组件的一些简单的基础知识,有个大体的映像就可以了,后续我们将讲一一详细介绍。