浅谈四大组件

我发现我记性越来越差了。

1、Activity

可以显示一些控件也可以监听并处理用户的事件作出相应。

Activity之间通过Intent进行通信。在Intent的描述中,有两个重要的部分:动作和动作对应的数据。

 

2、BroadcastReceive广播接收器

可以使用它对外部事件进行过滤,比如:电话呼入,邮件信息等。对感兴趣的外部事件进行接收并作出响应。

它可以启动一个Activity或者service来响应他们收到的信息,或者用NotificationManager来通知用户。

通知的方式,比如:闪动背灯、震动、播放声音等,一般是在状态栏上放一个持久的图标,用户可以打开它并获取信息。

 

广播类型:

普通广播:Content.sendBroadcast(Intent myIntent);发送的

有序广播:Content.sendOrderedBroadcast(intent,receiverPermission);

异步广播:Content.sendStickyBroadcast(Intent myIntent);

还有sendStickyOrderedBroadcast(intent, resultReceiver, scheduler,  initialCode, initialData, initialExtras)方法,该方法具有有序广播的特性也有异步广播的特性;发送异步广播要: <uses-permission android:name="android.permission.BROADCAST_STICKY" />权限,接收并处理完Intent后,广播依然存在,直到你调用removeStickyBroadcast(intent)主动把它去掉

注意:发送广播时的intent参数与Contex.startActivity()启动起来的Intent不同,前者可以被多个订阅它的广播接收器调用,后者只能被一个(Activity或service)调用。

 

静态注册:在注册表里面配置

<receiver android:name=".SMSBroadcastReceiver" >  

<intent-filter android:priority = "2147483647" >    

<action android:name="android.provider.Telephony.SMS_RECEIVED" />  

</intent-filter>

</receiver >

 

动态注册:一般在Activity可交互时OnResume()内注册BroadcastReceive

IntentFilter intentFilter=new IntentFilter("android.provider.Telephony.SMS_RECEIVED");

registerReceiver(mBatteryInfoReceiver ,intentFilter);//反注册unregisterReceiver(receiver);

 

注意:

1.生命周期只有十秒左右

2. 动态注册广播接收器还有一个特点,就是当用来注册的Activity关掉后,广播也就失效了。

 

静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用

系统常见广播Intent,如开机启动、电池电量变化、时间改变等广播

 

3、Service服务:

Service使用步骤如下

       1>继承service类

       2>AndroidManifast.xml配置清单文件中<application>节点里对服务进行配置

              <service name=".SMSService"/>

 

服务不能自己运行,需要通过Contex.startService()或Contex.bindService()启动服务

通过startService()方法启动的服务于调用者没有关系,即使调用者关闭了,服务仍然运行想停止服务要调用Context.stopService(),此时系统会调用onDestory(),使用此方法启动时,服务首次启动系统先调用服务的onCreate()-->onStart(),如果服务已经启动再次调用只会触发onStart()方法。

 

使用bindService()启动的服务与调用者绑定,只要调用者关闭服务就终止,使用此方法启动时,服务首次启动系统先调用服务的onCreate()-->onBind(),如果服务已经启动再次调用不会再触发这2个方法,调用者退出时系统会调用服务的onUnbind()-->onDestory(),想主动解除绑定可使用Contex.unbindService(),系统依次调用onUnbind()-->onDestory();

 

4、Content Provider内容提供者:

android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。这些数据可以存储在文件系统中、在一个SQLite数据库、或以任何其他合理的方式,

其他应用可以通过ContentResolver类(见ContentProviderAccessApp例子)从该内容提供者中获取或存入数据.(相当于在应用外包了一层壳),

只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中

它的好处:统一数据访问方式。

 

android系统自带的内容提供者(顶级的表示数据库名,非顶级的都是表名)这些内容提供者在SDK文档的android.provider Java包中都有介绍。见:http://developer.android.com/reference/android/provider/package-summary.html

├────Browser

├────CallLog

├────Contacts

│                ├────Groups

│                ├────People

│                ├────Phones

│                └────Photos

├────Images

│                └────Thumbnails

├────MediaStore

│                ├────Albums

│                ├────Artists

│                ├────Audio

│                ├────Genres

│                └────Playlists

├────Settings

└────Video

 CallLog:地址和接收到的电话信息

 Contact.People.Phones:存储电话号码

 Setting.System:系统设置和偏好设置

 

posted @ 2015-03-06 16:21  asijack  阅读(199)  评论(0编辑  收藏  举报