22、23 .内容观察者、广播和服务

在这里插入图片描述
内容访问者

内容访问者:
1.获取提供者:getContentResolver(); ContentResolver 对象
2.访间内容提供者:增删改查

ContentResolver resolver= getContentResolver();
uri uri=uri.parse("content://com. provider111/query");
Cursor cursor= resolver . query(uri ,null ,null ,null,null);
if(cursor!=nu11&&cursor . getCount()>0){
while (cursor .moveToNext()){
long _id=cursor . getInt(0);
String sname=cursor . getstring(1);
string sno=cursor. getstring(2) ;
string sex=cursor . getstring(3);
int img=cursor . getInt(4);
Student student=new Student( _id,sname,sno ,sex,img) ;
System. out .println(student) ;
}
}

内容观察者使用
1.注册内容观察者

Uri uri2=Uri .parse (" content ://com. provider/delete");
//注册层内容观察者
resolver .registerContentobserver(uri2, true, new Contentobserver(new Handler()) {
//监听内容提供者数据发生改变
public void onChange (boolean selfChange) {
super . onChange(selfChange) ;
System. out,println("数据发生改变.......");
}
});

2.在内容提供者添加通知内容观察者代码
insert. update 、delete 方法中;

Uri uri2=uri.parse(" content://com. provider/insert");
getContext (.getContentResolver ( .notifyChange (uri2,null);

发送广播

//动作:广播地址,ip包名应用名称
Intent intent=new Intent ("com. imau。broadcast");
//参数:hinten权限
sendBroadcast(intent);
Intent intent=new Intent("com. example . mymessage");
//设置广播接收着具体信息;
intent . setPackage("com. imau. broadcastdemo2");
//参数:广播接收者报名com. imau .broadcastdemo;广播接收者具体类全路径
com. imau. broadcas tdemo . MyBroadcastReceiver
//intent . setcomponent (new
ComponentName (getPackageNameO,getPagkageName (0)+" . MyReceiver")); 
sendBroadcast (intent ,null);

给本地应用发送广播

**//1.创建一个本地广播管理器LocalBroadcastManager
broadcastManager=localBroadcas tManager.getInstance (MainActivity.this);
//2.构建广播动作
IntentFilter intentFilter-new IntentFilter("com. example . mymessage") ;
//3.注册广插接收和动作
broadcas tManager.registerReceiver (receiver,intentFilter) ;
//4.发送广播
Intent intent=new Intent ("com. example . mymessage");
broadcas tManager .sendBroadcast (intent) ;
**

广播与广播接收器
1.广播事件处理属于系统级的事件处理(一-般事件处理是属于View级的事件处理)
2.一个应用可以在发生特定事件时发送Broadcast,系统中任何应用只要注册了对应的Receiver就会接收到此Broadcast
3.一个应用如果对某个广播感兴趣,就可以注册对应的Receiver来接
4.广播事件机制是应用程序(进程间)之间通信的一种手段
5.广播机制最大的特点就是发送方并不关心接收方是否接到数据,也不关心接收方是如何处理数据的,通过这种形线来起到接、收双方的完全解耦
6.广播事件处理过程即针对某一广播做出响应的过程

广播接收者
●Android系统中,内置了很多系统级别的广播,例如手机开机完成后会
发送一条广播,电池电量不足时会发送一条广播等。
●Android系 统中提供了广播接收者BroadcastReceiver,广播接收者的作用就是接收来自系统或其他应用程序的广播,并作出回应。
在这里插入图片描述
●广播(Broadcast)是一种运用在应用程序之间传递消息的机制。
●广播接收者(BroadcastReceiver) 是用来过滤、接收并响应广播的一类组件。
●广播接收者可以监听系统中的广播消息,在不同组件之间进行通信。

广播接收者创建与注册
●要使用广播接收者接收其他应用程序发出的广播,先要在本应用中创
建广播接收者并进行注册。

1、创建广播接收者

public class MyBroadcastReceiver extends BroadCastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}

广播接收者创建与注册
●注册广播有两种方式,常驻型广播非常驻型广播
1、注册常驻型广播
常驻型广播是当应用程序关闭后,如果接收到其他应用程序发出的广播, 那么该程序会自动重新启动。常驻型广播在清单文件中注册。

<receiver android:name="cn.itcast.MyBroadcastReceiver">
<intent filter android:priority="20">
<action android:name="android.provider.Telephony.SMS_ _RECEIVED"/>
</intent-filter>
</receiver>

2、注册非常驻型广播
非常驻型广播依赖于注册广播的组件的生命周期,例如,在Activity中注册广播接收者,当Activity销毁后广播也随之被移除。这种广播事件在代码中注册。

MyBroadCastReceiver receiver = new MyBroadCastReceiver();
String action = "android.provider.Telephony.SMS_ _RECEIVED";
IntentFilter intentFilter = new IntentFilter(action);
registerReceiver(receiver, intentFilter);

非常驻型广播可以在onDestory()方法中解除广播,具体代码如下:
unregisterReceiver(receiver);

区别静态注册与动态注册
在这里插入图片描述
**服务(Service)**是Android中的四大组件之它能够长期在后台运行且不提供用户界面。即使用户切到另一应用程序,服务仍可以在后台运行。

服务的特点:
●Service在后台运行, 不用与用户进行交互
●即使程序被切换到后台,或者用户打开新的应用,服务仍可运行
●服务并非运行在 独立的进程中,而是依赖于创建服务的应用程序进
程。如果某个应用进程被杀掉,该服务也会停止
●在默认情况下, Service运 行在应用程序进程的主线程(UI线程)中,
如果需要在Service中处理–些网络连接等耗时的操作,那么应该将
这些任务放在Service的分线程中处理,避免阻塞用户界面

区别Service与Activity

  1. Activity:
    ●Activity对应–个界面
    ●应用退出, Activity对象就会死亡
    ●应用再次进入,启动的Activity对象是重新创建的
  2. Service
    ●不与任何界面关联,绝不会到前台来
    ●应用退出, Service仍在运行
    ●应用再次进入,启动的Service还是前面运行的Service对象
  3. Activity与Service的选择标准:
    ●如果某个应用程序组件需要运行时向用户呈现某种界面,或者该程序
    需要与用户交互,就需要使用Activity,否则就应该考虑使用Service。

*服务的创建方式与创建Activity类似, 只需要继承Service类, 然后在清单文件中注册即可。 *

1、创建服务

public class MyService extends Service {
public IBinder onBind(Intent arg0) {
return null;
}

2、在清单文件中配置

<application>
<service android:name- "cn.itcast.servicetest.MyService*/>
</application>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值