android 应用的基本组件介绍

来源:互联网 发布:淘宝店运动壹号怎么样 编辑:程序博客网 时间:2024/05/16 23:48

android应用 通常由一个或者多个基本组件组成.常见的有activity , service , brodacastreceiver , contentprovider  等.

1.activity 和 view

activity是android应用中负责与用户交互的组件. activity只能通过setContentView(View)来显示指定组件.

View组件是所有UI控件,容器控件的基类,View组件就是Android应用中用户看到的部分.但是View组件需要放到容器组件中,或者使用Activity将它显示出来.

如果需要通过某个Activity把指定View显示出来,调用Activity的setContentView()方法即可.

//创建一个线性布局管理器LinearLayout layout = new LinearLayout(this);//设置该Activity显示layoutsetContentView(layout);
上面的程序通过代码创建LinearLayout对象,接着调用Activity的setContentView(layout)把这个布局管理器显示出来.

setContentView()方法也可以接受一个布局管理器的ID做参数:

//设置该Activity显示main.xml 文件定义的viewsetContentView(R.layout.main);

Activity为Android应用提供了可视化用户界面,如果该Android应用需要多个用户界面,那么这个Android应用将会包含多个Activity,多个Axtivity组成Activity栈,当前活动的Activity位于栈顶.

Activity包含了一个setTheme(int resid)方法来设置其窗口的风格,例如我们希望窗口不显示ActionBar,以及对话框形式显示窗口,都可通过该方法来实现.


2.Service

Service与Activity的地位是并列的,它也代表一个单独的Android组件.Service与Activity 的区别在于:Service通常位于后台运行,它一般不需要与用户交互,隐藏Service组件没有图形界面.

与Activity组件需要继承Activity基类相似,Service组件需要继承Service基类.一个Service组件被运行起来之后,它将拥有自己独立的生命周期,Service组件通常用于为其他组件提供后台服务或监控其他运行状态.


3.BroadcastReceiver

BroadcastReceiver是Android应用中另一个重要的组件,从代码实现的角度来看,BroadcastReceiver非常类似与事件编程中的监听器.与普通事件监听器不同的是:普通事件监听器监听的事件源是程序中的对象;而BraodcastReceiver监听的事件源是Android应用中的其他组件.

使用BroadcastReceiver组件接受广播消息比较简单,开发者只要实现自己的BroadcastReceiver子类,并重写onReceive(Context context,Intent intent)方法即可.

当其他组件通过sendBroadcast() , sendStickyBroadcast() , sendOrderedBraodcast()方法发送广播消息时,如该BraodcastReceiver也对该消息"感兴趣" (通过IntentFilter配置),BroadcastReceiver的onReceive(Context context,Intent intent)方法将会被触发.

开发者实现了自己的BroadcastReceiver之后,通常有两种方式来注册这个系统级的"事件监听器".

1)在java代码中通过Context.registReceiver()方法注册BroadcastReceiver.

2)在AndroidManifest.xml文件中使用<receiver.../>元素完成注册.


4.ContentProvider

对于Android 应用而言,它们必须相互独立,各自运行在自己的Dalvik虚拟机实例中,如果这些Android应用之间需要实现实时的数据交换.例如我们开发了一个发短信的程序,当发送短信时需要从联系人管理应用中读取指定联系人的数据----这就需要多个应用程序之间进行数据交换.

Android 系统为这种跨应用的数据交换提供了一个标准:ContentProvider.  当用户实现自己的ContentProvider时, 需要实现如下抽象方法:

1)  inser(Uri, ContentValues)  :  向ContentProvider插入数据

2)  delete(Uri, ContentValues)  :  删除ContentProvider中指定数据.

3)  update(Uri, ContentValues, String, String[])  :  更新ContentProvider中指定数据

4)  query(Uri, String[], String, String[], String)  :  从ContentProvider中查询数据

通常与ContentProvider结合使用的是ContentPesolver ,一个应用程序使用ContentProvider提供自己的数据,而另一个应用程序通过ContentResolver来访问数据.


5. Intent 和 IntentFilter

严格来讲,Intent 并不是Android应用的组件,但它对于Android应用的作用非常大------它是Android应用内不同组件之间通信的载体.

当Android运行时需要连接不同组件时,通常就需要借助Intent来实现.Intent可以启动应用中另一个Activity , 也可以启动一个Service组件,还可以发送一条广播消息来触发系统中的BroadcastReceiver . 也就是说,Activity , Service , BroadcastReceiver三种组件之间通信都可以以Intent作为载体,只是不同组件使用Intent的机制稍有区别而已.

1)当需要启动一个Activity时,可调用Context的startActivity(Intent intent)或者startActivityForResult(Intent intent, int requestCode)方法,这两个方法中的Intent参数封装了需要启动的目标Activity的信息.

//从mActivity跳到别的activityIntent intent = new Intent();intent.setClassName(xxx,xxx);mActivity.startActivity(intent);

两个activity,一个是ActivityA,一个是ActivityB,

大致代码如下:

Intent in = new Intent(A.this,B.class);startActivity(in);


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  :  显式Intent明确指定需要启动或者触发的组件类名.

2)隐式Intent  :  隐式Intent只是指定需要启动或者触发的组件应满足怎样的条件.

对于显示Intent而言,Android  系统无须对该Intent做任何解析,系统直接找到指定的目标组件,启动或触发即可,

对于隐式Intent而言,Android系统需要对该Intent进行解析,解析出它的条件,然后再去系统中查找与之匹配的目标组件.如果找到符合条件的组件,就启动或触发它们.

那么Android系统如何判断被调用组件是否符合隐式Intent呢??

这就需要靠IntentFilter来实现了,被调用组件可以通过IntentFilter来声明自己所满足的条件------也就是声明自己到底能处理哪些隐式Intent.

















0 0
原创粉丝点击