sendBroadcast和sendStickyBroadcast的区别

转载 2012年03月31日 14:48:25

http://www.cnblogs.com/hoji-real/articles/2244538.html

我们平时最经常使用的是sendBroadcast,就是把一个Intent广播出去。今天我在看wifi的时候,还发现了sendStickyBroadcast。官方文档是这样写的:


public abstract void sendStickyBroadcast (Intent intent)

Since: API Level 1
Perform a sendBroadcast(Intent) that is "sticky," meaning the Intent you are sending stays around after the broadcast is complete, so that others can quickly retrieve that data through the return value of registerReceiver(BroadcastReceiver, IntentFilter). In all other ways, this behaves the same as sendBroadcast(Intent).
You must hold the BROADCAST_STICKY permission in order to use this API. If you do not hold that permission, SecurityException will be thrown.
Parameters


intent The Intent to broadcast; all receivers matching this Intent will receive the broadcast, and the Intent will be held to be re-broadcast to future receivers.

光从字面的意思是很难理解的。只有你写例子才会明白的。

Java代码  收藏代码
  1. package com.android.testbroadcast;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6. import android.os.Bundle;  
  7. import android.view.View;  
  8. import android.view.View.OnClickListener;  
  9. import android.widget.Button;  
  10.   
  11. public class MainActivity extends Activity {  
  12.     Button btnSendi;  
  13.     Button btnSends;  
  14.     Button btnStart;  
  15.     Context mContext;  
  16.     /** Called when the activity is first created. */  
  17.     @Override  
  18.     public void onCreate(Bundle savedInstanceState) {  
  19.         super.onCreate(savedInstanceState);  
  20.         setContentView(R.layout.main);  
  21.         btnSendi=(Button) findViewById(R.id.sendi);  
  22.         btnSends=(Button) findViewById(R.id.sends);  
  23.         btnStart=(Button) findViewById(R.id.start);  
  24.         mContext=getApplicationContext();  
  25.         btnSendi.setOnClickListener(new OnClickListener(){  
  26.   
  27.             @Override  
  28.             public void onClick(View v) {  
  29.                 // TODO Auto-generated method stub  
  30.                 Intent intent = new Intent();  
  31.                 intent.setAction("com.android.my.action");  
  32.                 intent.setFlags(1);  
  33.                 mContext.sendBroadcast(intent);  
  34.             }  
  35.               
  36.         });  
  37.           
  38.         btnStart.setOnClickListener(new OnClickListener(){  
  39.   
  40.             @Override  
  41.             public void onClick(View v) {  
  42.                 // TODO Auto-generated method stub  
  43.                 Intent intent = new Intent(MainActivity.this,ReceiverActivity.class);  
  44.                  
  45.                 startActivity(intent);  
  46.             }  
  47.               
  48.         });  
  49.           
  50.         btnSends.setOnClickListener(new OnClickListener(){  
  51.   
  52.             @Override  
  53.             public void onClick(View v) {  
  54.                 // TODO Auto-generated method stub  
  55.                 Intent intent = new Intent();  
  56.                 intent.setAction("com.android.my.action.sticky");  
  57.                 intent.setFlags(2);  
  58.                 mContext.sendStickyBroadcast(intent);  
  59.             }  
  60.               
  61.         });  
  62.     }  
  63. }  


Java代码  收藏代码
  1. package com.android.testbroadcast;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.BroadcastReceiver;  
  5. import android.content.Context;  
  6. import android.content.Intent;  
  7. import android.content.IntentFilter;  
  8. import android.net.wifi.WifiManager;  
  9. import android.os.Bundle;  
  10. import android.view.View;  
  11. import android.view.View.OnClickListener;  
  12. import android.widget.Button;  
  13.   
  14. public class ReceiverActivity extends Activity {  
  15.      private IntentFilter mIntentFilter;  
  16.       
  17.     /** Called when the activity is first created. */  
  18.     @Override  
  19.     public void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.main);  
  22.         mIntentFilter = new IntentFilter();  
  23.         mIntentFilter.addAction("com.android.my.action");  
  24.         mIntentFilter.addAction("com.android.my.action.sticky");  
  25.   
  26.               
  27.     }  
  28.     private BroadcastReceiver mReceiver = new BroadcastReceiver() {  
  29.   
  30.         @Override  
  31.         public void onReceive(Context context, Intent intent) {  
  32.             final String action = intent.getAction();  
  33.             System.out.println("action"+action);  
  34.               
  35.         }  
  36.     };  
  37.       
  38.     @Override  
  39.     protected void onResume() {  
  40.         // TODO Auto-generated method stub  
  41.         super.onResume();  
  42.         registerReceiver(mReceiver, mIntentFilter);  
  43.     }  
  44.       
  45.     @Override  
  46.     protected void onPause() {  
  47.         // TODO Auto-generated method stub  
  48.         super.onPause();  
  49.         unregisterReceiver(mReceiver);  
  50.     }  
  51.       
  52.       
  53. }  



在MainActivity里面会有sendBroadcast和sendStickyBroacat.在ReceverActivity里面通 过BroadcastReceiver来接收这两个消息,在ReceiverActivity里是通过代码来注册Recevier而不是在 Manifest里面注册的。所以通过sendBroadcast中发出的intent在ReceverActivity不处于onResume状态是无 法接受到的,即使后面再次使其处于该状态也无法接受到。而sendStickyBroadcast发出的Intent当ReceverActivity重 新处于onResume状态之后就能重新接受到其Intent.这就是the Intent will be held to be re-broadcast to future receivers这句话的表现。就是说sendStickyBroadcast发出的最后一个Intent会被保留,下次当Recevier处于活跃的 时候,又会接受到它。



相关文章推荐

Android学习 - sendBroadcast和sendStickyBroadcast

sendStickyBroadcast和sendStickyOrderedBroadcast发出的广播会一直滞留(等待),以便有人注册这则广播消息后能尽快的收到这条广播。其他功能与sendBroadc...

Android广播sendBroadcast(intent,receiverPermission)解析

偶然看到发送广播的一个方法里带着多个参数,而大部分网上教程讲解的都是只带一个参数(intent)的sendBroadcase( ),所以决定对这个带多个参数的方法研究一下,过程甚是艰辛。       ...

sendStickyBroadcast 的理解和使用

要知道区别首先需要看一下Android Developers Reference, 它可是我们最好的老师了,sendBroadcast 大家应该都会用了我就不赘述了,下面来看看sendStickyBr...

发送广播sendBroadcast

发送广播sendBroadcast

Android应用程序发送广播(sendBroadcast)的过程分析

欢迎zhangxusoftgcy我的:资源博客空间简历设置|帮助|退出 CSDN首页 资讯 论坛 博客 下载 搜索 更多 CTO俱乐部 学生大本营 培训充电 移动开发 软件研发 云计算...

sendStickyBroadcast 的理解和使用

要知道区别首先需要看一下Android Developers Reference, 它可是我们最好的老师了,sendBroadcast 大家应该都会用了我就不赘述了,下面来看看sendStickyBr...

sendStickyBroadcast 的理解和使用

转自: http://blog.csdn.net/yihua0607/article/details/6890805 要知道区别首先需要看一下Android Developers R...

sendStickyBroadcast 的理解和使用

要知道区别首先需要看一下Android Developers Reference, 它可是我们最好的老师了,sendBroadcast 大家应该都会用了我就不赘述了,下面来看看sendStickyBr...

Android应用程序发送广播(sendBroadcast)的过程分析

前面我们分析了Android应用程序注册广播接收器的过程,这个过程只完成了万里长征的第一步,接下来它还要等待ActivityManagerService将广播分发过来。ActivityManagerS...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)