Android系统中广播Broadcast机制简要学习计划

上传人:cn****1 文档编号:494274591 上传时间:2024-01-27 格式:DOC 页数:15 大小:437.50KB
返回 下载 相关 举报
Android系统中广播Broadcast机制简要学习计划_第1页
第1页 / 共15页
Android系统中广播Broadcast机制简要学习计划_第2页
第2页 / 共15页
Android系统中广播Broadcast机制简要学习计划_第3页
第3页 / 共15页
Android系统中广播Broadcast机制简要学习计划_第4页
第4页 / 共15页
Android系统中广播Broadcast机制简要学习计划_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《Android系统中广播Broadcast机制简要学习计划》由会员分享,可在线阅读,更多相关《Android系统中广播Broadcast机制简要学习计划(15页珍藏版)》请在金锄头文库上搜索。

1、在Android系统中,广播Broadcast )是在组件之间传播数据 vlntent )的一种机制;这些组件甚至 是可以位于不同的进程中,这样它就像Binder机制一样,起到进程间通信的作用;本文通过一个简单的例子来学习Android系统的广播机制,为后续分析广播机制的源代码作准备。在Android系统中,为什么需要广播机制呢?广播机制,本质上它就是一种组件间的通信方式,如果 是两个组件位于不同的进程当中,那么可以用Binder机制来实现,如果两个组件是在同一个进程中,那么它们之间可以用来通信的方式就更多了,这样看来,广播机制似乎是多余的。然而,广播机制却是不可 替代的,它和Binder机制

2、不一样的地方在于,广播的发送者和接收者事先是不需要知道对方的存在的, 这样带来的好处便是,系统的各个组件可以松耦合地组织在一起,这样系统就具有高度的可扩展性,容易 与其它系统进行集成。在软件项目中,是非常强调模块之间的高内聚低耦合性的,不然的话,随着系统越来越庞大,就会 面临着越来越难维护的风险,最后导致整个项目的失败。Android应用程序的组织方式,可以说是把这种高内聚低耦合性的思想贯彻得非常透彻,在任何一个Activity中,都可以使用一个简单的Intent,通过startActivity或者startService,就可以把另外一个 Activity或者Service启动起来为它服务,

3、而且它根本| 上不依赖这个Activity或者Service的实现,只需要知道它的字符串形式的名字即可,而广播机制更绝, 它连接收者的名字都不需要知道。不过话又说回来,广播机制在Android系统中,也不算是什么创新的东西。如果读者了解J2EE或者COM,就会知道,在 J2EE中,提供了消息驱动BeanvMessage-Driven Bean ),用来实现应用程序各个组件之间的消息传递;而在COM中,提供了连接点vConnection Point )的概念,也是用来在应用程序各个组间间进行消息传递。无论是J2EE中的消息驱动Bean,还是COM中的连接点,或者 Android系统的广播机制,它

4、们的实现机理都是消息发布/订阅模式的事件驱动模型,消息的生产者发布事件,而使用者订阅感兴趣的事件。废话说了一大堆,现在开始进入主题了,和前面的文章一样,我们通过具体的例子来介绍Android系统的广播机制。在这个例子中,有一个 Service,它在另外一个线程中实现了一个计数器服务,每隔一秒 钟就自动加1,然后将结果不断地反馈给应用程序中的界面线程,而界面线程中的Activity在得到这个反馈后,就会把结果显示在界面上。为什么要把计数器服务放在另外一个线程中进行呢?我们可以把这个计 数器服务想象成是一个耗时的计算型逻辑,如果放在界面线程中去实现,那么势必就会导致应用程序不能 响应界面事件,最后

5、导致应用程序产生ANRvApplication Not Responding )问题。计数器线程为了把加1后的数字源源不断地反馈给界面线程,这时候就可以考虑使用广播机制了。首先在Android源代码项目中创建一个Android应用程序项目,名字就称为Broadcast吧。关于如何获得Android源代码项目,请参考 在Ubuntu上下载、编译和安装 Android最新源代码一文;关于如何在 Android源代码项目中创建应用程序项目,请参考 在Ubuntu上为Android系统内置Java应用程序测试 Application Frameworks层的硬件服务一文。这个应用程序项目定义了一个名为

6、shy.luo.broadcast 的package,这个例子的源代码主要就是实现在这里了。下面,将会逐一介绍这个package里面的文件。首先,我们在src/shy/luo/broadcast/ICounterService.java文件中定义计数器的服务接口:view plain1. package shyuo.broadcast。2.3.publicin terfaceICou nterService 4.publicvoid startCounter(int in itVal05.publicvoid stopCounter(06.这个接口很简单,它只有两个成员函数,分别用来启动和停止

7、计数器;启动计数时,还可以指定计数器的初始值。接着,我们来看一个应用程序的默认Activity 的实现,在 src/shy/luo/broadcast/MainActivity.java件中:view plain1. package shyuo.broadcast2.3.importan droid.app.Activity。4.importan droid.c onten t.BroadcastReceiver。5.importan droid.c onten t.Comp onen tName。6.importan droid.c onten t.C on text。7.importan

8、droid.c onten t. Intent。8.importan droid.c onten t. Inten tFilter。9.importan droid.c onten t.ServiceC onn ecti on。10.importan droid.os.B un dle。11.importan droid.osBin der。12.importan droid.util.Log。13.importan droid.view.View。14.importan droid.view.View. On ClickListe ner。15.importan droid.widget.B

9、utt on。16.importan droid.widget.TextView。17.18.publicclass Mai nActivityexte nds Activityimpleme nts On ClickListe ner 19.private final staticStri ng LOG_TAG =shy.luo.broadcast.Mai nActivity20.21.privateButt on startButt on 二n ull 。22.privateButt on stopButt on 二n ull 。23.privateTextView coun terTex

10、t =n ull 。24.25.privateICo un terService coun terService =n ull o26.27.Override28.public void on Create(B un dle saved In sta nceState 29.super .onCreate(savedInstanceState030.setC onten tView(Rayout.mai n031.32.startButt on 二(Butto nfin dViewByld(R.id.button_start。33.stopButton = (Butto nfin dViewB

11、yld(R.id.button_stop。34coun terText = (TextViewfi ndViewByld(R.id.textview_co un ter。35.36.startButto n. set On ClickListe ner(this 。37.stopButton.setOnClickListener(this 。38.39.startButton.setEnabled(true 。40.stopButton.setEnabled(false 。41.42.Intent bindintent =new Inten t(Ma in Activity.this , Co

12、un terService.class 。43.bin dService(b in di nte nt, serviceCo nn ecti on. Con text.BIND_AUTO_CREATE044.45.Log.i(LOG_TAG,Ma in Activity Created.。46.47.48.Override49.public void onResume( 50.super .onResume( 。51.52.Inten tFilter cou nterActio nFilter =new Inten tFilter(Cou nterService.BROADCAST_COUNT

13、ER_ACTION。53.registerReceiver(co un terActi on Receiver, coun terAct ion Filter。54.55.56.Override57.public void onPause( 58.super .onPause( 。59.un registerReceiver(co un terActi on Receiver。60.61.62.Override63.public void onDestroy( 64.super .onDestroy( 。65.unbin dService(serviceC onn ecti on。66.67.68.Override69.public void onClick(View v 70.if (v.equals(startButton 71.if (counterService !=null 72.coun terService.startCo un ter(0。73.74.startButton.setEnabled(false 。75.stopButton.setEnabled(true 。76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.91.92.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号