源码下载我们知道广播是夸进程的,所以不能什么时候都用广播,如果涉及到安全问题就最好别用广播,怕其他应用进程监听到你的广播。这里采用接口去实现广播的功能。

下面看实现代码:

1.首先我定义一个接口

[javascript] view plaincopyprint?
  1. package com.cn.interfacecallbackbroadcast;
  2. /**
  3. * 发送广播接口
  4. * @author  cWX286335
  5. * @version  [版本号, 2015年6月11日]
  6. * @see  [相关类/方法]
  7. * @since  [产品/模块版本]
  8. */
  9. public interface IListener
  10. {
  11. void notifyAllActivity(String str);
  12. }
package com.cn.interfacecallbackbroadcast;/*** 发送广播接口* @author  cWX286335* @version  [版本号, 2015年6月11日]* @see  [相关类/方法]* @since  [产品/模块版本]*/
public interface IListener
{void notifyAllActivity(String str);
}

2.定义3个Activity A、B、C实现这个接口

[javascript] view plaincopyprint?
  1. package com.cn.interfacecallbackbroadcast;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.widget.EditText;
  7. public class A extends Activity implements IListener
  8. {
  9. private EditText tv_a;
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState)
  12. {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.a);
  15. tv_a = (EditText)findViewById(R.id.tv_a);
  16. //注册监听器
  17. ListenerManager.getInstance().registerListtener(this);
  18. }
  19. @Override
  20. public void notifyAllActivity(String str)
  21. {
  22. tv_a.setText(str);
  23. }
  24. public void btnClick(View v)
  25. {
  26. //a页面跳转到B页面
  27. Intent intent = new Intent();
  28. intent.setClass(this, B.class);
  29. startActivity(intent);
  30. }
  31. }
package com.cn.interfacecallbackbroadcast;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;public class A extends Activity implements IListener
{private EditText tv_a;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.a);tv_a = (EditText)findViewById(R.id.tv_a);//注册监听器ListenerManager.getInstance().registerListtener(this);}@Overridepublic void notifyAllActivity(String str){tv_a.setText(str);}public void btnClick(View v){//a页面跳转到B页面Intent intent = new Intent();intent.setClass(this, B.class);startActivity(intent);}
}
[javascript] view plaincopyprint?
  1. package com.cn.interfacecallbackbroadcast;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.widget.EditText;
  7. public class B extends Activity implements IListener
  8. {
  9. private EditText tv_b;
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState)
  12. {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.b);
  15. tv_b = (EditText)findViewById(R.id.tv_b);
  16. ListenerManager.getInstance().registerListtener(this);
  17. }
  18. @Override
  19. public void notifyAllActivity(String str)
  20. {
  21. tv_b.setText(str);
  22. }
  23. public void btnClick(View v)
  24. {
  25. //b页面跳转到c页面
  26. Intent intent = new Intent();
  27. intent.setClass(this, C.class);
  28. startActivity(intent);
  29. }
  30. }
package com.cn.interfacecallbackbroadcast;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;public class B extends Activity implements IListener
{private EditText tv_b;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.b);tv_b = (EditText)findViewById(R.id.tv_b);ListenerManager.getInstance().registerListtener(this);}@Overridepublic void notifyAllActivity(String str){tv_b.setText(str);}public void btnClick(View v){//b页面跳转到c页面Intent intent = new Intent();intent.setClass(this, C.class);startActivity(intent);}
}
[javascript] view plaincopyprint?
  1. package com.cn.interfacecallbackbroadcast;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.EditText;
  6. public class C extends Activity implements IListener
  7. {
  8. private EditText tv_c;
  9. @Override
  10. protected void onCreate(Bundle savedInstanceState)
  11. {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.c);
  14. tv_c = (EditText)findViewById(R.id.tv_c);
  15. ListenerManager.getInstance().registerListtener(this);
  16. }
  17. @Override
  18. public void notifyAllActivity(String str)
  19. {
  20. tv_c.setText(str);
  21. }
  22. public void btnClick(View v)
  23. {
  24. //发送广播通知所有注册该接口的监听器
  25. ListenerManager.getInstance().sendBroadCast("大家能收到我的信息吗");
  26. }
  27. }
package com.cn.interfacecallbackbroadcast;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;public class C extends Activity implements IListener
{private EditText tv_c;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.c);tv_c = (EditText)findViewById(R.id.tv_c);ListenerManager.getInstance().registerListtener(this);}@Overridepublic void notifyAllActivity(String str){tv_c.setText(str);}public void btnClick(View v){//发送广播通知所有注册该接口的监听器ListenerManager.getInstance().sendBroadCast("大家能收到我的信息吗");}
}

3.定义一个管理类去管理一个接口集合

[javascript] view plaincopyprint?
  1. package com.cn.interfacecallbackbroadcast;
  2. import java.util.List;
  3. import java.util.concurrent.CopyOnWriteArrayList;
  4. public class ListenerManager
  5. {
  6. /**
  7. * 单例模式
  8. */
  9. public static ListenerManager listenerManager;
  10. /**
  11. * 注册的接口集合,发送广播的时候都能收到
  12. */
  13. private List<IListener> iListenerList = new CopyOnWriteArrayList<IListener>();
  14. /**
  15. * 获得单例对象
  16. */
  17. public static ListenerManager getInstance()
  18. {
  19. if(listenerManager == null)
  20. {
  21. listenerManager = new ListenerManager();
  22. }
  23. return listenerManager;
  24. }
  25. /**
  26. * 注册监听
  27. */
  28. public void registerListtener(IListener iListener)
  29. {
  30. iListenerList.add(iListener);
  31. }
  32. /**
  33. * 注销监听
  34. */
  35. public void unRegisterListener(IListener iListener)
  36. {
  37. if(iListenerList.contains(iListener))
  38. {
  39. iListenerList.remove(iListener);
  40. }
  41. }
  42. /**
  43. * 发送广播
  44. */
  45. public void sendBroadCast(String str)
  46. {
  47. for (IListener iListener : iListenerList)
  48. {
  49. iListener.notifyAllActivity(str);
  50. }
  51. }
  52. }
package com.cn.interfacecallbackbroadcast;import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;public class ListenerManager
{/*** 单例模式*/public static ListenerManager listenerManager;/*** 注册的接口集合,发送广播的时候都能收到*/private List<IListener> iListenerList = new CopyOnWriteArrayList<IListener>();/*** 获得单例对象*/public static ListenerManager getInstance(){if(listenerManager == null){listenerManager = new ListenerManager();}return listenerManager;}/*** 注册监听*/public void registerListtener(IListener iListener){iListenerList.add(iListener);}/*** 注销监听*/public void unRegisterListener(IListener iListener){if(iListenerList.contains(iListener)){iListenerList.remove(iListener);}}/*** 发送广播*/public void sendBroadCast(String str){for (IListener iListener : iListenerList){iListener.notifyAllActivity(str);}}}

4.调用广播函数广播消息

[javascript] view plaincopyprint?
  1. ListenerManager.getInstance().sendBroadCast("大家能收到我的信息吗");
ListenerManager.getInstance().sendBroadCast("大家能收到我的信息吗");

A、B、C三个页面分别向ListenerManager注册了自己(ListenerManager.getInstance().registerListtener(this)),然后ListenerManager单例对象会调用sendBroadCast()函数去遍历接口集合执行接口函数notifyAllActivity()以达到广播通知的效果。然后去更新A、B、C页面的EditText内容。

这个应用场景很多,希望帮到大家。

源码下载

Android用观察者模式代替广播通知刷新界面相关推荐

  1. android 跳转系统通知,android 跳转到应用通知设置界面

    4.4以下并没有提过从app跳转到应用通知设置页面的Action,可考虑跳转到应用详情页面,下面是直接跳转到应用通知设置的代码: if (android.os.Build.VERSION.SDK_IN ...

  2. android 跳转到应用通知设置界面【Android 8.0 需要特殊处理】

    整理下安卓跳转通知设置页面的代码,如下: 常量补充: private static final String CHECK_OP_NO_THROW = "checkOpNoThrow" ...

  3. android中view刷新界面,Android view invalidate()使用

    Android提供了Invalidate方法實現界面刷新,但是Invalidate不能直接在線程中調用,因為他是違背了單線程模型:androidUI操作並不是線程安全的,並且這些操作必須在UI線程中調 ...

  4. Android开发本地及网络Mp3音乐播放器(二十)歌曲下载完成后通知主界面更新本地音乐

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51448597 项目源码(打赏5积分请点这边):http://download.csdn ...

  5. 如何让fragment刷新界面_快速实现android版抖音主界面的心得

    原文作者:DK_BurNIng 如何快速确定竞品某个界面的实现方式? 当你收到产品一个需求是模仿某个竞品且时间很短没有过多时间给你调研技术方案的时候,如何尽快确定这个功能的技术方案呢? 这里我给出我自 ...

  6. Android:检查通知权限并跳转到通知设置界面

    声明:该方案只对API19及以上版本有效 一.目标需求 最近项目中在完善推送功能,需要进入APP时检测一下是否开启了推送权限,如果没有开启弹窗提醒,当用户点击弹窗时直接跳转到APP的通知设置界面,就像 ...

  7. android 跳转oppo应用中心_android 跳转到应用通知设置界面的示例

    4.4以下并没有提过从app跳转到应用通知设置页面的Action,可考虑跳转到应用详情页面,下面是直接跳转到应用通知设置的代码: if (android.os.Build.VERSION.SDK_IN ...

  8. 8.Android学习之消息、通知、广播与闹钟(二)

    目录 8.消息.通知.广播与闹钟(二) 3.使用Notification类在状态栏上显示通知 4.BroadcastReceiver类的使用 4-1.BroadcastReceiver类简介 4-2. ...

  9. 在命令行中通过adb shell am broadcast发送广播通知以及Android的常用adb命令

    转载自:http://www.cnblogs.com/622698abc/archive/2013/06/11/3132306.html?utm_source=tuicool 通过命令行执行adb s ...

最新文章

  1. 关于matlab鼠标响应
  2. LoadRunner SQL 2008
  3. java 反射 工厂_JAVA反射机制、工厂模式与SPRING IOC
  4. ExtJS的xtype列表
  5. 010_多表的表关系
  6. Git操作之配置别名
  7. android广播注册源码,android 广播源码简要分析-注册
  8. 飞秋2010下载不仅野草是如此
  9. java垃圾回收机制的理解
  10. Title:eNSP 映射到外网
  11. Java程序员必会!没有返回值的构造函数是怎么完成赋值的?
  12. python3中split的用法_python3 - 对有规律的字符串进行切割(split用法)
  13. FydeOS v11 发布,全新 Linux 终端提供更多功能
  14. iPad PPT演示录屏踩坑及后续ffmpeg处理
  15. 国际象棋渲染测试软件,C4D结合Octane Render渲染器制作三维国际象棋建模渲染教程 含中英文字幕...
  16. Shell中的while用法
  17. 如果把14亿中国人拉到一个微信群
  18. 7个 优秀的远程“结对编程“编码工具
  19. Web端H5播放FLV、HLS、MP4 (二)
  20. java中金额转换精度问题

热门文章

  1. int main( int argc , char *argv[] , char *envp[] )中参数解说
  2. java makedir用法_Java Files.makeDir方法代码示例
  3. Kubernetes上领先的开源Serverless解决方案有哪些
  4. .NET Core微服务之基于Ocelot+IdentityServer实现统一验证与授权
  5. SylixOS DSP upgrade命令解析
  6. 轻量级微服务架构【读书笔记2】
  7. JavaScript设计模式--简单工厂模式例子---XHR工厂
  8. Java获取当前路径和读取文件
  9. IBM 365服务器安装serverraid-7k控制器
  10. Unity3d中角色模型和角色名字保持相对位置