Android基本组件介绍

Android应用通常由一个或多个基本组件组成(Activity、Service、BroadcastReceiver、ContentProvider等),其中最常用的组件就是Activity。


Activity

Activity为Android应用提供了可视化用户界面(是应用中负责于用户交互的组件),如果该Android应用需要多个用户界面,那么这个Android应用将会包含多个Activity,多个Activity组成Activity栈,当前活动的Activity位于栈顶

实际上Activity是Window的容器,Activity包含一个getWindow()方法,该方法返回该Activity所包含的窗口。对于Activity而言,开发者一般不需要关心Window对象。如果应用程序不调用Activity的setContentView()来设置该窗口显示的内容,那么该程序将显示一个空窗口


View

View组件是所有UI控件、容器控件的基类,View组件就是Android应用中用户实实在在看到的部分

但View组件需要放到容器组件中,或者使用Activity将它显示出来。如果需要通过某个Activity把指定View显示出来,调用Activity的setContentView()方法即可。

//创建一个线性布局管理器
LinearLayout layout = new LinearLayout(this);
//设置该Activity显示layout
super.setContentView(layout); //接受一个View对象作为参数

//设置Activity显示main.xml文件定义的View
setContentView(R.layout.main); //接受一个布局管理资源的ID作为参数

Service

Service组件通常位于后台运行,它一般不需要与用户交互,因此Service组件没有图形用户界面

当一个Service组件被运行起来之后,它将拥有自己独立的生命周期,Service组件通常用于为其它组件提供后台服务或监控其它组件的运行状态


BroadcastReceiver

BroadcastReceiver代表广播消息接收器,从代码实现角度来看,其非常类似于事件编程中的监听器,其监听的事件源是Android应用中的其它组件

开发者只要实现自己的BroiadcastReceiver子类,并重写onReceive(Context context, Intent intent)方法即可。当其它组件通过SendBroadcast()、sendStickyBroadcast()或sendOrderedBroadcast()方法发送广播消息时,若该BroadReceiver对此消息感兴趣(通过IntentFilter配置),其onReceive(Context context, Intent intent)方法将会被触发。

注册这个系统级的“事件监听器”的方法:
1. 在Java代码中通过Context.registReceiver()方法注册BroadcastReceiver。
2. 在AndroidManifest.xml文件中使用<receiver ... />元素完成注册。


ContentProvider

由于Android应用各自运行在自已的Dalvik虚拟机实例中,如果应用之间需要实现实时的数据交换,就要遵循Android系统为这种跨应用的数据交换制定的标准:ContentProvider

用户实现自己的ContentProvider的方法:
1. 实现抽象方法insert(Uri, ContentValues)。向ContentProvider插入数据。
2. 实现抽象方法delete(Uri, ContentValues)。删除ContentProvider中指定的数据。
3. 实现抽象方法update(Uri, ContentValues, String, String[])。更新ContentProvider中指定的数据。
4. 实现抽象方法query(Uri, String[], String, String[], String)。从ContentProvider查询数据。

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


Intent

Intent是Android应用内不同组件之间通信的载体,其可用于启动应用中另一个Activity、启动一个Service组件、发送一条广播消息来触发系统中的BroadcastReceiver。启动上述其它组件的方法如下:

  1. 启动Activity时,调用Context的startActivity(Intent intent)方法,其中Intent参数封装了需要启动的目标Activity信息。
  2. 启动Service时,调用Context的startService(Intent intent)方法或bindService(Intent service, ServiceConnection conn, int flags)方法,其中的Intent参数封装了需要启动的目标Service信息。
  3. 启动BroadcastReceiver时,调用Context的sendBroadcast(Intent intent)、sendStickyBroadcast(Intent intent)或sendOrderedBroadcast(Intent intent, String receiverPermission),其中Intent参数封装了需要触发的目标BroadcastReceiver的信息。

当一个组件通过Intent表示了启动或触发另一个组件的“意图”之后 ,这个意图可以分为两类:

  1. 显式Intent,其明确指定需要启动或者触发的组件的名称。
  2. 隐式Intent,其只指定需要启动或者触发的组件应满足怎样的条件。Android系统会对该Intent进行解析,解析出它的条件,然后于去系统中查找与之匹配的目标组件。如果找到符合条件的组件,就启动或触发它们。被调用组件可通过IntentFilter来声明自己所满足的条件,也即声明自己到底能处理哪些隐式Intent

摘自《疯狂Android讲义》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值