源码下载我们知道广播是夸进程的,所以不能什么时候都用广播,如果涉及到安全问题就最好别用广播,怕其他应用进程监听到你的广播。这里采用接口去实现广播的功能。
下面看实现代码:
1.首先我定义一个接口
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实现这个接口
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; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.a); tv_a = (EditText)findViewById(R.id.tv_a); //注册监听器 ListenerManager.getInstance().registerListtener(this); } @Override public 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); } }
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; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.b); tv_b = (EditText)findViewById(R.id.tv_b); ListenerManager.getInstance().registerListtener(this); } @Override public 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); } }
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; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.c); tv_c = (EditText)findViewById(R.id.tv_c); ListenerManager.getInstance().registerListtener(this); } @Override public void notifyAllActivity(String str) { tv_c.setText(str); } public void btnClick(View v) { //发送广播通知所有注册该接口的监听器 ListenerManager.getInstance().sendBroadCast("大家能收到我的信息吗"); } }
3.定义一个管理类去管理一个接口集合
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.调用广播函数广播消息
ListenerManager.getInstance().sendBroadCast("大家能收到我的信息吗");
A、B、C三个页面分别向ListenerManager注册了自己(ListenerManager.getInstance().registerListtener(this)),然后ListenerManager单例对象会调用sendBroadCast()函数去遍历接口集合执行接口函数notifyAllActivity()以达到广播通知的效果。然后去更新A、B、C页面的EditText内容。
这个应用场景很多,希望帮到大家。
源码下载