下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android中Broadcast广播机制的原理是什么
这篇文章将为大家详细讲解有关Android中Broadcast广播机制的原理是什么,文章内容质量较高,因此在下分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。首先,一个activity是如何发出一个广播的?是通过sendBroadcast()函数,函数的参数为一个intent对象,该对象最重要的是定义了动作,将广播发送出去后,能够处理该动作的其他activity便能够接收广播,并作出响应。那么其他的activity是如何知道自己该接受什么动作呢?是通过过滤器fliter。在filter中定义了能够响应的所有动作,如果广播发出的动作存在于filter当中,该activity就响应,反之忽略广播。那么,接受了广播之后,该activity又该执行什么操作呢?这里我们要说一下,对广播的响应我们是通过类BroadcastReceiver来实现的,我们通过继承该类,并重载其onReceive方法,能够自定义执行后该做的处理。我们还需要了解什么是动作所谓动作,即action,其实大体上说就是对要进行操作的描述。android给我们自定义了很多动作,例如ACTION_EDIT,ACTION_VIEW,等等。它们对即将进行的操作进行了描述,就像ACTION_EDIT,就将操作描述为编辑。那么能够实现编辑功能的activity就会响应。系统定义的action有很多,在此不再赘述,大家想要详细了解的话可以参考官方文档。那么除了官方提供的,我们用得更多的还是我们自定义的action,自己对要实现的动作做一个描述,通常的表示方法为“包名”+“.”+“动作描述”。例如:“com.suns.HTTPRequestActivity.BUTTONCHANGE”,分解开即”com.suns.HTTPRequestActivity“+“.”+"BUTTONCHANGE"。就自定义了一个按钮变化的action。其实这只是一个命名规律的字符串罢了,为的只是让intent和fliter能够对应,还有让人们知道这个动作是干嘛的。广播能用几种方法实现呢?它们有什么区别联系?实现广播的方法有两种。一种是在androidmanifest.xml当中去注册广播,另一种方法是在代码中动态注册广播,这两种方法虽然都能实现广播机制,但是还是有很大不同,所以运用也要分情况。如果我们在androidmanifest.xml中去定义的话,那么该广播是在activity结束之后也不会结束的,原因在于它已经写在了manifest.xml文件当中,也就是注册到了系统当中,所以无论你的activity是否存在,对于该广播没有影响。而在java代码中动态注册广播,在该activity结束后,我们可以注销该广播,也就是它随着activity的消失而消失。这样解释,大家都应该清楚了。如果是一些系统应用,比如手机没电后震动啊,后台计算流量啊这样的功能,需要一直存在的,我们可以在androidmanifest.xml中注册,而一些只有该activity存在时才有意义的广播,比如更改界面等等,就用动态注册比较合适,activity都没了。该广播还有什么用呢?只会浪费资源而已。好了,说了这么多,我们还是需要用一个例子去应用一下它。首先先是动态注册广播的,点击界面上的button后,发送更改button的广播,然后button变为进度条。代码如下:Broadcasttest.java:package
com.suns.ButtonChanged;
import
android.content.BroadcastReceiver;
import
android.content.Context;
import
android.content.Intent;
import
android.view.View;
public
class
Broadcasttest
extends
BroadcastReceiver{
@Override
public
void
onReceive(Context
arg0,
Intent
arg1)
{
//
TODO
Auto-generated
method
stub
ButtonChangedActivity.getButton().setVisibility(View.GONE);
ButtonChangedActivity.getBar().setVisibility(View.VISIBLE
);
}
}下一页将为您介绍ButtonChangeActivity.java实现代码以及main.xmlButtonChangeActivity.java:package
com.suns.ButtonChanged;
import
android.app.Activity;
import
android.content.Intent;
import
android.content.IntentFilter;
import
android.os.Bundle;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import
android.widget.ProgressBar;
public
class
ButtonChangedActivity
extends
Activity
{
/**
Called
when
the
activity
is
first
created.
*/
private
static
Button
button=null;
private
static
ProgressBar
bar=null;
private
Broadcasttest
t;
private
IntentFilter
filter;
@Override
public
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button=(Button)findViewById(R.id.button);
bar=(ProgressBar)findViewById(R.id.bar);
button.setOnClickListener(new
ButtonClick());
}
public
static
Button
getButton()
{
return
button;
}
public
static
ProgressBar
getBar()
{
return
bar;
}
@Override
protected
void
onDestroy()
{
//
TODO
Auto-generated
method
stub
super.onDestroy();
ButtonChangedActivity.this.unregisterReceiver(t);
}
class
ButtonClick
implements
OnClickListener
{
@Override
public
void
onClick(View
v)
{
//
TODO
Auto-generated
method
stub
t=new
Broadcasttest();
filter=new
IntentFilter();
filter.addAction(Intent.ACTION_EDIT);
Intent
intent=new
Intent();
intent.setAction(Intent.ACTION_EDIT
);
ButtonChangedActivity.this.registerReceiver(t,
filter);
ButtonChangedActivity.this.sendBroadcast(intent);
}
}
}我们用registerReceiver函数去注册一个广播响应事件,有两个参数,***个是我们自定义的receiver对象,第二个即是过滤器。注意:我们要在activity的onDestroy()方法中注销该广播!main.xml:<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="点击"
/>
<ProgressBar
android:id="@+id/bar"
android:visibility="gone"
android:layout_wi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铁路信号设备招标合同三篇
- 烟台大学《数据结构课程设计》2021-2022学年第一学期期末试卷
- 三年级数学(上)计算题专项练习附答案集锦
- 四年级数学(四则混合运算带括号)计算题专项练习与答案汇编
- 五年级数学(小数四则混合运算)计算题专项练习及答案
- 徐州工程学院《美术(Ⅱ):美术创作》2021-2022学年第一学期期末试卷
- 学期教学课程工作计划
- 主管职能与责任的全面分析计划
- 公关活动策划与实施方案计划
- 邢台学院《美国文学史及选读》2023-2024学年第一学期期末试卷
- 少儿英语主流教学法
- 喜庆丰收农业行业年终总结计划PPT课件模板
- 中小学主题班会-国家公祭日主题班会教育课件
- 大数据分析方法及工具应用-大数据分析法课件
- 《红楼梦》教学讲解课件讲义
- 环境工程项目管理教材课件
- 一年级上册语文试题期末学科核心素养监测(含答案)部编版
- 苏格拉底的哲学思想课件
- 兵团精神讲座-课件
- 销售培训课件:精英导购销售技巧
- 项目开工安全检查验收记录表(现场管理部分)
评论
0/150
提交评论