今天分享一篇PM撸代码系列【Android四大基本组件】:
这一篇貌似重点回顾《大话西游》。。。大话西游是我最喜欢的电影之一,今天趁这个机会,多放几张照片^^...
通过之前PM撸代码系列的前8篇文章,相信大家已经打好了Java语言的基础了,现在,我们可以正式进入Android开发了。今天将介绍一下Android四大基本组件,文章采集、整理自书本和网络资料。
前方高能,请吸气进入!
【神奇的开发模式】
Android应用程序开发遵循MVC(Model-View-Controller)设计模式,因此Android开发可以分为两个部分进行:表现层和逻辑控制层。
表现层是Android应用程序的门面,也就是直接跟你接触的那部分。逻辑控制层则负责实现表现层各控件的功能,干的是幕后工作。
举个栗子,你就懂了,明星团队其实就像表现层和逻辑层的关系,明星肯定不是自己一个人干活的,明星本人就是表现层,Ta们负责光鲜亮丽的外表,但是幕后有很多人实现明星的功能,比如经纪人、水军、炒作团队、包养明星的老板。。。
【Android四大基本组件】
先将四大组件列举如下:
(1)Activity
(2)Service
(3)Broadcast Receiver
(4)Content Provider
这四大组件就是Android系统开发里,必不可少的基本组件了。看起来是不是很高大上,然后看不懂,然然后有点想十动然拒??不用怕,我会用我的方式讲给你听,增加你接受枯燥编程知识的概率!
通过类比,我发现其实这四大基本组件,很像去西天取了二十多年经的唐僧师徒。
(1)Activity像万事亲力亲为的孙悟空
(2)Service像凡是任劳任怨的沙和尚
(3)Broadcast Receiver像啰里啰嗦的唐僧,看似弱小,却威力超强(令无数人折腰的各种Android自启程序,基本就是Broadcast Receiver搞的鬼)
(4)Content Provider像似乎什么都不会,整天想着回高老庄和喊“大师兄,师傅被妖怪抓走了”的猪八戒(好长的定语,哥们,挺住!)
下面细说^^
【Activity孙悟空】
一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity就像孙悟空,遇到什么事都是他们往前冲,化缘、探路、打妖怪、请救兵……都是悟空一个干的。而Activity也是这样,基本和用户进行交互的都是Activity。
要注意一下两点:
(1)声明/注册:
应用程序中的每一个Activity,必须要在AndroidManifest.xml配置文件中注册后才能被识别和使用。(其实现在你用集成开发工具,都是自动注册的)
(2)多个Activity是通过Intent进行切换的:
一般在项目创建时,系统会自动生成一个Activity页面用以设计逻辑控制层。如果需要多个页面,则应在项目中添加第二个Activity页面,这里命名为SecondActivity。实现页面切换的步骤如下:
创建一个Intent对象: Intent intent=new Intent;
设置跳转页面为SecondActivity:intent.setClass(MainActivity.this, SecondActivity.class);
调用Activity的startActivity(intent)方法,即可切换到SecondActivity页面。
【Service沙师弟】
Service就很像西游记里的沙师弟,他任劳任怨,干的是脏活累活,一直在后台默默奉献。基本没有一个章节是主要讲沙师弟的。Service是不出现在应用程序表面的,它不跟用户进行直接交互。
(1)Service通常位于后台运行:
它一般不需要与用户交互,没有用户界面的程序。Service组件需要继承Service基类。Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。
(2)Service分为两种:
- started(启动):当应用程序组件(如activity)调用startService()方法启动服务时,服务处于started状态。
- bound(绑定):当应用程序组件调用bindService()方法绑定到服务时,服务处于bound状态。
当服务是started状态时,其生命周期与启动它的组件无关,并且可以在后台无限期运行,即使启动服务的组件已经被销毁。因此,服务需要在完成任务后调用stopSelf()方法停止,或者由其他组件调用stopService()方法停止。
而当服务是bound状态时,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止
(3)声明/注册:
开发人员需要在应用程序配置文件中声明全部的service,使用标签。
【Broadcast Receiver唐僧】
Only you!!!能伴我取西经。。。
上面的歌词是不是有点耳熟?好吧,这个唐僧就有点《大话西游》里的啰嗦的唐僧,看似弱小,其实威力很强,不小心就被感化了。。。Android中也有这样一个“啰嗦”的组件,就是Broadcast Receiver,它可以对外部事件进行监测,只对感兴趣的外部事件进行接收并做出响应。
就像啰嗦的唐僧一样,唐僧受到了特定的刺激(比如孙悟空把月光宝盒扔掉),唐僧就开始对孙悟空进行持续不断的爱国主义教育。而Broadcast Receiver受到了特定刺激,如当数据网络可用时,就会启动事先设置好的事件(如启动应用程序)。
(1)声明/注册
广播接收者的注册有两种方法,分别是:
程序动态注册:动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。
AndroidManifest文件中进行静态注册:静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。(这是应用自启的大招!!)
(2)响应
广播接收器没有用户界面,它可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。
通知可以用很多种方式来吸引用户的注意力,例如闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
通过特定的设置,开发人员可以利用Broadcast Receiver使得程序自启,像唐僧说话一样,没完没了。。。
【Content Provider猪八戒】
猪八戒在唐僧西天取经的团队里,起着一个粘合剂的作用,虽然他平时好吃懒做,常常嚷嚷着要回高老庄,但是,在发生大事情(唐僧被妖怪抓走了),猪八戒往往起着一个消息传递者的身份,急急忙忙去找孙悟空,并告诉它“大师兄,师傅被妖怪抓走了”。
Content Provider在Android系统中,也起着粘合剂的作用。它使一个APP的数据能够被别的APP使用,如通讯录数据被多个应用程序使用。下面几个要点值得关注:
(1)其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。(开发人员不会直接使用ContentProvider类的对象)
(2)ContentProvider实现数据共享:ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。
好啦,Android系统的四大组件已经简要介绍完毕,看到这里的都是好孩纸!