LocalBroadcastManager简介

LocalBroadcastManager是Google官方AndroidSupport包提供的一个工具,用来管理广播的类。只能用来在同一个应用的不同组件之间发送广播,进行数据交互。和普通的全局广播相比较,LocalBroadcastManager的安全性相对较高。


布局文件

<?xml version="1.0" encoding="utf-8"?>    

activity文件

package com.licheng.android.weextest;import android.app.Service;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.support.annotation.Nullable;import android.support.v4.app.ServiceCompat;import android.support.v4.content.LocalBroadcastManager;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.TextView;public class LocalBroadcastTestActivity extends AppCompatActivity implements View.OnClickListener{    Button btnSendBroadcast, btnStopBroadcast;    TextView txtBroadcast;    static final String ACTION_START = "com.licheng.android.weextest.START";    static final String ACTION_UPDATE = "com.licheng.android.weextest.UPDATE";    static final String ACTION_STOP = "com.licheng.android.weextest.STOP";    LocalBroadcastManager localBroadcastManager;    BroadcastReceiver broadcastReceiver;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        System.out.println("LocalBroadcastTestActivity onCreate");        setContentView(R.layout.broadcast_layout);        btnSendBroadcast = (Button) findViewById(R.id.btnSendBroadcast);        btnStopBroadcast = (Button) findViewById(R.id.btnStopBroadcast);        txtBroadcast = (TextView) findViewById(R.id.txtBroadcast);        btnSendBroadcast.setOnClickListener(this);        btnStopBroadcast.setOnClickListener(this);        localBroadcastManager = LocalBroadcastManager.getInstance(this);        IntentFilter filter = new IntentFilter();        filter.addAction(ACTION_START);        filter.addAction(ACTION_UPDATE);        filter.addAction(ACTION_STOP);        broadcastReceiver = new BroadcastReceiver() {            @Override            public void onReceive(Context context, Intent intent) {                System.out.println("LocalBroadcast onReceive");                if(intent.getAction().equals(ACTION_START)){                    txtBroadcast.setText("START");                }else if(intent.getAction().equals(ACTION_UPDATE)){                    txtBroadcast.setText("UPDATE " + intent.getIntExtra("value", 0));                } else if (intent.getAction().equals(ACTION_STOP)) {                    txtBroadcast.setText("STOP");                }            }        };        localBroadcastManager.registerReceiver(broadcastReceiver, filter);    }    @Override    public void onClick(View view) {        switch (view.getId()){            case R.id.btnSendBroadcast:                System.out.println("btnSendBroadcast click");                startService(new Intent(LocalBroadcastTestActivity.this, LocalBroadcastService.class));                break;            case R.id.btnStopBroadcast:                System.out.println("btnStopBroadcast click");                stopService(new Intent(LocalBroadcastTestActivity.this, LocalBroadcastService.class));                break;            default:                break;        }    }    public static class LocalBroadcastService extends Service{        LocalBroadcastManager localBroadcastManager;        int count = 0;        static final int MSG_UPDATE = 1;        Handler handler = new Handler(){            @Override            public void handleMessage(Message msg) {                switch (msg.what){                    case MSG_UPDATE:                        count ++;                        Intent intent = new Intent(ACTION_UPDATE);                        intent.putExtra("value", count);                        localBroadcastManager.sendBroadcast(intent);                        Message nmsg = handler.obtainMessage(MSG_UPDATE);                        handler.sendMessageDelayed(nmsg, 1000);                        break;                    default:                        super.handleMessage(msg);                        break;                }            }        };        @Override        public void onCreate() {            super.onCreate();            System.out.println("LocalBroadcast onCreate");            localBroadcastManager = LocalBroadcastManager.getInstance(this);        }        @Override        public void onDestroy() {            super.onDestroy();            System.out.println("LocalBroadcast onDestroy");            localBroadcastManager.sendBroadcast(new Intent(ACTION_STOP));            handler.removeMessages(MSG_UPDATE);        }        @Override        public int onStartCommand(Intent intent, int flags, int startId) {            System.out.println("LocalBroadcast onStartCommand");            localBroadcastManager.sendBroadcast(new Intent(ACTION_START));            handler.removeMessages(MSG_UPDATE);            Message msg = handler.obtainMessage(MSG_UPDATE);            handler.sendMessageDelayed(msg, 1000);            return ServiceCompat.START_STICKY;        }        @Nullable        @Override        public IBinder onBind(Intent intent) {            System.out.println("LocalBroadcast onBind");            return null;        }    }    @Override    protected void onDestroy() {        System.out.println("LocalBroadcastTestActivity onCreate");        super.onDestroy();        localBroadcastManager.unregisterReceiver(broadcastReceiver);    }}

上面的例子通过service发送广播,service需要在mainfest中注册


运行效果



参考: https://my.oschina.net/ososchina/blog/340339  

更多相关文章

  1. windows android ndk环境搭建
  2. Android(安卓)开发(三)使用Stirngs资源文件的技巧
  3. Android(安卓)TableLayout TableRow点击变色效果
  4. android c++ ndk 的编译环境搭建
  5. ionic3打包安卓apk
  6. 高通平台(8917/8937/8953...) secure boot 软件配置
  7. Android(安卓)网络下载文件 图片 httpurl
  8. Android(安卓)media媒体库分析之:分类别统计媒体文件大小
  9. 写在20120524:aidl

随机推荐

  1. 给 Android(安卓)开发者的 Flutter 指南
  2. 阿拉伯语系处理方法
  3. delphi xe5 android iny绿色版+最新SDK/N
  4. Android学习――HorizontalScollview水平
  5. Android设置AlertDialog点击按钮对话框不
  6. layout_weight属性图解
  7. android――屏幕分辨率
  8. Android-手势识别(普通手势识别:上 下 左
  9. 深入源码分析Handler 消息机制 、Looper
  10. 常见Android(安卓)Native崩溃及错误原因