android 代替广播,Android用观察者模式代替广播通知刷新界面

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

下面看实现代码:

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 iListenerList = new CopyOnWriteArrayList();

/**

* 获得单例对象

*/

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内容。

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

源码下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值