您的位置:首页 > 其它

利用Intent使Activity和Service通过BroadcastReceiver进行数据交互

2016-05-10 19:42 423 查看
对于Android中有四个组件Acitivity,Service,Broadcast,ContentProvider,对于ContentProvider是跨应用的一种数据交换的标准。今天就不先讲这个。

我们先考虑一下如何在一个demo中实现Acitivity,Service,BroadcastReceiver之间的数据联系。

我们可以利用Intent作为一个"信使"来传递一些信息。

1)new 一个Activity,在Acitivity中进行事件的处理,可以利用一个点击事件等,来构建一个显示意图 fg:Intent intent=new Intent(this,xxx.class) note01:xxx为目标Service note02:在明确使用这个显示意图的时候,这个Service必须是事先构建完成

note:也可以利用一个控件的事件处理对指定的Service进行停止(停止数据交互)

================================================================================================================

2)既然用Intent来发送了一个显示意图,明确指定了一个Service启动(开启数据交互),对于Acitivy中不间断从service中获得数据的话,可以利用在Service中的onCreate()中用一个handler(全局变量)来发送一个延迟消息

handler.postDelayed(new Runnable(){#####note:在有一个类继承Runnable(接口)Thread构建的时候,run()中的代码就会执行,

note:以下代码是API中对postDelayed进行描述:------》将一个runnable添加到消息队列中,当这个runnable当这个线程和handler关联的时候

Causes the Runnable r to be added to the message queue.

* The runnable will be run on the thread to which this handler is

* attached.

重写run(){

1)构建一个Intent对象,(大部分是用来启动一个BroadcastRecriver)

2)对于的事件处理

3)启动对于的组件事件(sendBroadcast or startAcitivity 获得是在启动一个服务),note:这里用到最多的就是发送一个BroadcastReceiver

4)如果想要不间断的进行数据交互的话,可以在匿名内部类里继续发延迟消息 handler.postDelayed(this, 1000);

}

})

note:对于service需要对其进行销毁,可以在onDestroy()进行处理

@Override

public void onDestroy() {

Log.d("TAG","服务被销毁");

handler.removeCallbacksAndMessages(null);

super.onDestroy();

}

这个方式:只是针对于利用Handler来发送消息

========================================================================================================================

由于在Service中每次都会启动一个Broadcast,将在Service中进行处理的数据发到Activity中,这就可以在Activity中利用一个BroadcastReceiver的实现类来接受数据 note:BroadcastReceiver是一个abstract的

public class MyReceiver extends BroadcastReceiver{

@Override

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

if("%%%%%".equals(action)){ note:%%%%%是在Service中利用Intent来进行封装的。

//从intent中,把数据取出来,放到指定的位置进行数据处理

//进行数据的处理

}

}

}

note:BroadcastReceiver是需要注册和注销

注册:@Override

protected void onResume() {

super.onResume();

receiver = new MyReceiver();

IntentFilter filter = new IntentFilter();//构建广播的过滤器,由于在Android中有很多广播,这就需要对指定的intent中的封装的信息就行处理

filter.addAction("%%%%%");//对过滤器就行添加过滤广播类型

registerReceiver(receiver, filter);//注册广播

}

注销:@Override

protected void onPause() {

unregisterReceiver(receiver);//注销广播

super.onPause();

}

======================================================================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: