您的位置:首页 > 移动开发 > Android开发

Android四大组件

2017-02-05 21:11 148 查看

Android四大组件(Activity 活动,Service 服务,Content Provider 内容提供者,Broadcast Receiver 广播接收器)

Activity

概述

Activity是Android组件中最常见的四大组件之一。

Activity是一个应用程序组件,提供一个屏幕,用户可以通过交互来完成某项任务。

Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View)来显示指定空间。

在一个Android应用中,一个Activity通常就是一个单独的屏幕,它在上面可以显示一些控件也可以监听并处理用户的事件并作出响应。Activity之间通过Intent进行通信。


Activity的四种基本状态

1、Active/Running: 新的Activity启动后,显示在屏幕最前端,是位于盏的最顶端,此时它处于可见并能够和用户交互的激活状态叫做活动状态或者运行状态。

2、Paused: 当Activity失去焦点,被一个新的非全屏的Activity或者一个透明的Activity被放置在栈顶,此时的状态叫做暂停状态。此时它依然与窗口保持连接,但是在系统内存极端低下的时候将被强行终止。所以他仍然可见,但是失去了焦点不能与用户进行交互。

3、Stopped:如果一个Activity被另外的Activity完全覆盖掉,叫做停止状态。它依然保持所有状态和成员信息,但是它不再可见,所以它的窗口被隐藏,当系统内存需要被用在其他地方的时候,Stopped的Activity将被强行终止。

4、Killed:如果一个Activity是Paused或者Stopped状态,系统可以将该Activity从内存中删除,Android系统采用两种方式进行删除,一是要求该Activity结束,二是直接终止它的进程。当该Activity再次显示给用户时,它必须重新开始和重置前面的状态。


Activity的状态转换

当一个 Activity实例被创建、销毁或者启动另外一个 Activity 时,它在这四种状态之间进行转换,这种转换的发生依赖于用户程序的动作。如下图:




Activity的声明周期

Activity的生命周期流程图



1、启动Activity: 系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。

2、当前Activity被其他Activity覆盖其上或被锁屏: 系统会调用onPause方法,暂停当前Activity的执行。

3、当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。

4、当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台: 系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。

5、用户后退回到此Activity: 系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。

6、当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity: 再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。

7、用户退出当前Activity: 系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。


Service

Service主要用于在后台处理一些耗时的逻辑,或者去执行某些需要长期运行的任务。必要的时候我们甚至可以在程序退出的情况下,让Service在后台继续保持运行状态。

启动Service的两种方法

一、
startService()方法:
1、定义一个类继承Service;
2、在AndroidManifest.xml文件中配置该Service;
3、使用Context的startService(Intent)方法启动Service;
4、不在使用时,调用stopService(Intent)方法停止该服务。

startService()方法的生命周期如下:
onCreate() --> onStartCommand() --> onDestort()

注:如果服务已开启,则不会重复执行onCreate()而会调用onStart()和onStartCommand()。服务停止的时候就会调用onDestory()。

二、
bindService()方法:
1、定义一个类继承Service;
2、在AndroidManifest.xml文件中配置该Service;
3、使用Context的bindService(Intent, ServiceConnection, int)方法启动该Service;
不再使用时,调用unbindService(ServiceConnection)方法来停止服务。

bindService()方法的生命周期如下:
onCreate() --> onbind() --> onunbind() --> onDestory()

注:绑定服务不会调用onStart()或onStartCommand()。 bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。绑定者可以调用服务里面的方法。


Content Provider

Content Provider主要用于对外共享数据,也就是通过Content Provider把应用中的数据共享给其他应用访问,其他应用可以通过Content Provider对指定应用中的数据进行操作。
对Android应用而言,Content Provider之间必须独立,各自运行在自己的进程中。如果这些Android应用之间需要实现实时的数据交换,那么就需要多个应用程序之间进行数据交换。Android系统为这种跨应用的数据交换提供了一种标准:Content Provider。当用户实现自己的Content Provider时,需要实现如下的抽象方法:

1、insert(Uri, ContentValues): 向Content Provider插入数据。

2、delete(Uri, String, String[]): 删除Content Provider中指定的数据。

3、update(Uri, ContentValues, String, String[]): 更新Content Provider中指定的数据。

4、query(Uri, String[], String, String[], String): 向Content Provider查询数据。

通常与Content Provider结合使用的是Content Resolver,一个应用程序使用Content Provider暴露自己的数据,而另一个应用程序则通过Content Resolver来访问数据。


BroadcastReceiver

BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。

BroadcastReceiver的生命周期很简单:

BroadcastReceiver类似于事件监听器,普通监听器监听的事件源是程序中的对象,而BroadcastReceiver监听的事件源是Android应用中的其他组件。

BroadcastReceiver组件接收广播消息比较简单,只要是实现自己的BroadcastReceiver子类,并重写onReceive(Context context, Intent intent)方法便可。当其他组件通过sendBroadcast()、sendStickBroadcast()或者sendOrderedBroadcast()方法发送关闭消息时,通过IntentFilter配置,BroadcastReceiver的onReceived(Context context, Intent intent)方法将会触发。

实现自己的BroadcastReceiver之后,在Java代码中通过Context.registReceived()方法或者在AndroidManifest.xml文件中使用<receiver.../>进行注册。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: