Android开发四⼤组件概述
这个⽂章主要是讲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。
简述android概述⼀个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传递给它们。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论