这个文章主要是讲Android开发的四大组件,本文主要分为

一、Activity具体解释

二、Service具体解释

三、Broadcast Receiver具体解释

四、Content Provider具体解释

外加一个重要组件 intent的具体解释。(主要来自于网络)

1、Activity

一个Activity通常展现为一个可视化的用户界面。比如,一个activity可能展现为一个用户能够选择的菜单项列表或者展现一些图片以及图 片的标题。一个消息服务应用程序可能包括一个显示联系人列表的activity,一个编写信息的activity,以及其他一些查看信息和改动应用程序设 置的activity。尽管这些activity一起工作,共同组成了一个应用程序,但每个activity都是相对独立的。每个activity都 是Activity(android.app.Activity)的子类。

一个应用程序可能仅仅包括一个activity,或者像上面提到的消息服务程序一样有多个activity。一个应用程序包括几个activity以 及各个activity完毕什么样的功能全然取决于应用程序以及它的设计。通常每一个应用程序都包括一个在应用程序启动后第一个展现给用户的 activity。在当前展现给用户的activity中启动一个新的activity,能够实现从一个activity转换到另外一个 activity。

每一个activity都会有一个用于绘制用户界面的窗体。通常这样一个窗体会填充整个屏幕,当然这个窗体也能够比屏幕小并漂浮在其它窗体之上。 activity还能够使用一些额外的窗体,比如一个要求用户响应的弹出式对话框,或者是当用户在屏幕上选择一个条目后向用户展现一些重要信息的窗体。

展示activity窗体的可视化内容区域是一些具有层次关系(非常像数据结构中的树)的视图,而视图则是由类View的子类表示的。每一个视图控制窗 口中的一个矩形区域。父视图包括一些子视图并管理子视图的布局。位于叶节点的视图直接控制并响应用户的动作。因此视图就是activity与用户交互的接 口。比如,一个显示图片的视图,当用户单击的时候它可能会启动一个动作。Android有很多开发者能够直接使用的视图,包括button,文本域,滚动栏,菜 单,复选框等。

通过调用Activity.setContentView()方法来设置展现activity的窗体的视图。内容视图则是视图层次结构中的根节点视图。

2、Service

Service是Android的四大组件之中的一个,即Android系统的服务(不是一个线程,是主程序的一部分),与Activity不同,它是不能与用户交互的,不能自己启动的,须要调用Context.startService()来启动,执行后台,假设我们退出应用时,Service进程并没有结束,它仍然在后台行。

service没实用户界面,但它会在后台一直执行。比如,service可能在用户处理其他事情的时候播放背景音乐,或者从网络上获取数据,或者执行一些运算,并把运算结构提供给activity展示给用户。每一个service都扩展自类Serivce。

多媒体播放器播放音乐是应用service的一个很好的样例。多媒体播放器程序可能含有一个或多个activity,用户通过这些 activity选择并播放音乐。然而,音乐回放并不须要一个activity来处理,由于用户可能会希望音乐一直播放下去,即使退出了播放器去执行其他 程序。为了让音乐一直播放,多媒体播放器activity可能会启动一个service在后台播放音乐。Android系统会使音乐回放service一 直执行,即使在启动这个service的activity退出之后。

应用程序能够连接到一个正在执行中的service。当连接到一个service后,能够使用这个service向外暴露的接口与这个service进行通信。对于上面提到的播放音乐的service,这个接口可能同意用户暂停,停止或又一次播放音乐。

与activity以及其他组件一样,service相同执行在应用程序进程的主线程中。所以它们不能堵塞其他组件或用户界面,通常须要为这些service派生一个线程执行耗时的任务。

3、Broadcase receiver

1、BroadcastReceiver 用于异步接收广播Intent。主要有两大类,用于接收广播的:





  正常广播 Normal broadcasts(用 Context.sendBroadcast()发送)是全然异步的。它们都执行在一个没有定义的顺序,一般是在同一时间。这样会更有效,但意味着receiver不能包括所要使用的结果或中止的API。





  有序广播 Ordered broadcasts(用 Context.sendOrderedBroadcast()发送)每次被发送到一个receiver。所谓有序,就是每一个receiver执行后能够传播到下一个receiver,也能够全然中止传播--不传播给其它receiver。 而receiver执行的顺序能够通过matched intent-filter 里面的android:priority来控制,当priority优先级同样的时候,Receiver以随意的顺序执行。

2、广播接收器是一个专注于接收广播通知信息,并做出相应处理的组件。非常多广播是源自于系统代码的──比方,通知时区改变、电池电量低、拍摄了一张照片或者用户改变了语言选项。应用程序也能够进行广播──比方说,通知其他应用程序一些数据下载完毕并处于可用状态。

3、应用程序能够拥有随意数量的广播接收器以对全部它感兴趣的通知信息予以响应。全部的接收器均继承自BroadcastReceiver基类。

4、广播接收器没实用户界面。然而,它们能够启动一个activity来响应它们收到的信息,或者用NotificationManager来通知用户。通知能够用非常多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等等。一般来说是在状态栏上放一个持久的图标,用户能够打开它并获取消息。

4、Content provider

ContentProvider(内容提供者)是Android中的四大组件之中的一个。主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其它应用訪问,其它应用能够通过ContentProvider对指定应用中的数据进行操作。ContentProvider分为系统的和自己定义的,系统的也就是比如联系人,图片等数据。

下面这段是Google Doc中对ContentProvider的大致概述。

内容提供者将一些特定的应用程序数据供给其他应用程序使用。数据能够存储于文件系统、SQLite数据库或其他方式。内容提供者继承于ContentProvider 基类,为其他应用程序取用和存储它管理的数据实现了一套标准方法。然而,应用程序并不直接调用这些方法,而是使用一个 ContentResolver 对象,调用它的方法作为替代。ContentResolver能够与随意内容提供者进行会话,与其合作来对全部相关交互通讯进行管理。

5、intent

当接收到ContentResolver发出的请求后,内容提供者被激活。而其他三种组件──activity、服务和广播接收器被一种叫做intent的异步消息所激活。intent是一个保存着消息内容的Intent对 象。对于activity和服务来说,它指明了请求的操作名称以及作为操作对象的数据的URI和其他一些信息。比方说,它能够承载对一个activity 的请求,让它为用户显示一张图片,或者让用户编辑一些文本。而对于广播接收器而言,Intent对象指明了声明的行为。比方,它能够对全部感兴趣的对象声
明照相button被按下。

对于每种组件来说,激活的方法是不同的:

1、通过传递一个Intent对象至 Context.startActivity()或Activity.startActivityForResult()以加载(或指定新工作给)一个activity。对应的activity能够通过调用 getIntent() 方法来查看激活它的intent。Android通过调用activity的onNewIntent()方法来传递给它继发的intent。

一个activity常常启动了下一个。假设它期望它所启动的那个activity返回一个结果,它会以调用startActivityForResult()来代替startActivity()。比方说,假设它启动了另外一个activity以使用户挑选一张照片,它或许想知道哪张照片被选中了。结果将会被封装在一个Intent对象中,并传递给发出调用的activity的onActivityResult() 方法。

2、通过传递一个Intent对象至Context.startService()将启动一个服务(或给予正在执行的服务以一个新的指令)。Android调用服务的onStart()方法并将Intent对象传递给它。

与此类似,一个Intent能够被调用组件传递给 Context.bindService()以获取一个正在执行的目标服务的连接。这个服务会经由onBind() 方法的调用获取这个Intent对象(假设服务尚未启动,bindService()会先启动它)。比方说,一个activity能够连接至前述的音乐回放服务,并提供给用户一个可操作的(用户界面)以对回放进行控制。这个activity能够调用 bindService() 来建立连接,然后调用服务中定义的对象来影响回放。

3、应用程序能够凭借将Intent对象传递给 Context.sendBroadcast() ,Context.sendOrderedBroadcast(), 以及Context.sendStickyBroadcast()和其他类似方法来产生一个广播。Android会调用全部对此广播有兴趣的广播接收器的 onReceive()方法将intent传递给它们。

Android开发四大组件概述的更多相关文章

  1. 一个帖子学会Android开发四大组件

    来自:http://www.cnblogs.com/pepcod/archive/2013/02/11/2937403.html 这个文章主要是讲Android开发的四大组件,本文主要分为 一.Act ...

  2. 一天就学会Android开发四大组件

    这个文章主要是讲Android开发的四大组件,本文主要分为 一.Activity详解二.Service详解三.Broadcast Receiver详解四.Content Provider详解外加一个重 ...

  3. 关于Android开发四大组件

    文章主要是讲Android开发的四大组件,本文主要分为 文章源自:http://www.cnblogs.com/pepcod/archive/2013/02/11/2937403.html 一.Act ...

  4. Android开发四大组件之Service(具体解释篇)

    Android开发之四大组件--Service 一.Service 简单介绍 Service是android系统中的四大组件之中的一个(Activity.Service.BroadcastReceiv ...

  5. 从零开始学android开发-四大组件之一 Activity

    1.Activity是Android四大组件(Application Components)之一,简单来说Activity就是平常所见到的用户界面,一般情况下,一个Activity所占的窗口是满屏的, ...

  6. android中四大组件之间相互通信

    好久没有写有关android有关的博客了,今天主要来谈一谈android中四大组件.首先,接触android的人,都应该知道android中有四大组件,activity,service,broadca ...

  7. Android的四大组件

    Android的四大组件:Activity.Service.BroadcastReceiver.Content Provider. Content Provider 属于Android应用程序的组件之 ...

  8. Android之四大组件、六大布局、五大存储 总结

    Android之四大组件.六大布局.五大存储 一.四大组件:Android四大组件分别为activity.service.content provider.broadcast receiver.   ...

  9. Android深入四大组件(四)Android8.0 根Activity启动过程(前篇)

    前言 在几个月前我写了Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章,它们都是基于Android 7.0,当我开始阅读An ...

随机推荐

  1. 程序集的内部结构(托管模块、元素局、IL代码的分布情况)

    程序集的内部结构 在看程序集的结构之前,我们先来看托管模块的结构. 托管模块由四部分组成:PE32头.CLR头.元数据(Metadata).IL代码.其中PE32头是用来决定托管模块运行的系统环境(3 ...

  2. javascript笔记整理(数组)

    数组是一个可以存储一组或是一系列相关数据的容器. 一.为什么要使用数组. a.为了解决大量相关数据的存储和使用的问题. b.模拟真是的世界. 二.如何创建数组 A.通过对象的方式来创建——var a= ...

  3. linux 下vi中关于删除某段,某行,或者全部删除的命令

    1,先打开某个文件: vi   filename 2,转到文件结尾 在命令模式输入 G       转到10行 在命令模式输入 10G 4,删除所有内容:先用G 转到文件尾,然后使用下面命令: :1, ...

  4. VB.net总结

    .NET视频差点儿相同用时一周结束,总体感觉就是"走耳不走脑".刚開始看视频理解起来有一点困难,台湾口音以及台湾与大陆计算机术语的差异,让我把前几集相当于直接忽略过了(建议打算看这 ...

  5. swift 有些语法还是不支持。

    <pre name="code" class="html">"func hasAnyMatches(list: Int[], condit ...

  6. ASP.NET - 使用MqSql数据库

    1. 首先需要安装mysql, 脚本之家下载地址: http://www.jb51.net/softs/2193.html 或者去mysql.com官网都可以,一路next,安装好后,有个简单配置,提 ...

  7. QString ini ;转义符

    ini如果value字符串中存在:,通过双引号即可转义 [a] b=sdc";"gf

  8. 使用JDBC处理数据库大容量数据类型

    在本文将介绍如何使用JDBC操作MySQL数据库对于大容量数据类型的读取.在之前的博客中已经介绍了如何使用JDBC来操作数据库对各种数据的增删改查,那么大容量数据类型的数据操作又为何不同呢. 原因在于 ...

  9. 0 and 1

    Description Andrewid the Android is a galaxy-famous detective. In his free time he likes to think ab ...

  10. 【ASP.NET Web API教程】2.3.3 创建Admin控制器

    原文:[ASP.NET Web API教程]2.3.3 创建Admin控制器 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容. Part 3 ...