这篇文章将为大家详细讲解有关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.xml
ButtonChangeActivity.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:
关于Android中Broadcast广播机制的原理是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。