«

Android用接口回调广播通知所有界面刷新

时间:2024-3-2 18:36     作者:韩俊     分类: 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<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内容。

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


源码下载

标签: android

热门推荐