学过Android的人都知道,Android有四大组件,分别是Activity、Severice、BroadcastReceiver、ContentProvider。下面就来一览这四个组件的基本功能和职责。Activity:提供了Android应用中所有与用户交互的组件。Activity通过setContentView(view)实现组件的显示,其中view组件包含了Android几乎所有的UI控件,用户看到的也正是这一部分。
多个Activity是由栈存储的,当前活动的栈位于栈顶。
Activity包含一个setTheme(int resid)方法设置窗口的风格,如不现实标题,以对话框形式显示窗口。
注:
显示组件的方法:
1.setContentView(R.layout.main),布局交给XML去实现;
2.大家千万别忘记了还可以使用Java代码实现布局并显示,
LinearLayout layout = new LinearLayout(this);
setContentView(layout);
Service:是位于后台运行的一个组件,它是运行在应用程序的主线程中的。
注:
1.Service不是一个进程。它不会自己独立运行一个进程,只能作为进程的一部分而存在;
2.Service不是一个线程,它只是在主线程中运行。
BroadcastReceiver:是广播消息的接收器,是应用程序间传播信息的机制。
在 Android 里面有各种各样的广播,比如电池的使用状态,电话的接收和短信的接收都会产生一个广播,应用程序开发者也可以监听这些广播并做出程序逻辑的处理。
ContentProvider:是应用程序之间进行数据交互的组件。其中有如下几个方法:
insert(Uri,ContentValues);
delete(Uri,ContentValues);
update(Uri,ContentValues,String,String[]);
query(Uri,String[],String,String[],String);
Intent:特别申明它不是Android的组件,确是Activity、Service、BroadcastReceiver组件之间进行数据交换的载体。
1.当启动一个Activity时,调用startActivity(Intent intent),intent内部可以封装数据传递给目标Activity。
2.当启动一个Service时,调用startService(Intent intent),intent内部可以封装数据传递给目标Service
或调用bindService(Intent intent,ServiceConnection,int flags),intent内部可以封装数据传递给目标Service。
这里介绍下startService和bindService的区别:
startService:调用者(service1)通过startService(intent)启动被调用者(service2)后,service1和service2之间就不存在任何联系了,不可以访问service1内的方法,即使service1被关闭ondestroy,service2也会继续存在;
bindService: 调用者(service1)通过bindService(intent)启动被调用者(service2)后,service1和service2之间绑定这一起,如果调用者service1被关闭ondestroy,被调用者service2也会被关闭。
3.当启动一个BroadcastReceiver时,调用sendBroadcast(Intent intent)、sendStickyBroadcast(Intent intent)、sendOrderedBroadcast(Intent intent,String receiverPermission)发送广播。
Intent分为两类:
1.显示Intent : 显示Intent明确指定需要启动或触发的组件类名;
2.隐示Intent : 隐示Intent只是指定需要启动或者触发组件应满足的要求。需要Android进行解析,然后查找匹配的目标组件,靠IntentFilter来实现。