1.什么是广播?

1).BroadCast是android提供跨进程通信的一个框架。

2).同时broadcast是观察者模式的一种设计。

在 Android 中使用 Activity, Service, Broadcast, BroadcastReceiver

活动(Activity) - 用于表现功能

服务(Service) - 相当于后台运行的 Activity

广播(Broadcast) - 用于发送广播

广播接收器(BroadcastReceiver) - 用于接收广播

Intent - 用于连接以上各个组件,并在其间传递消息

2.广播的种类?

1). activity.sendbroadcast

普通广播,在广播发送以后,可以同时接收广播(逻辑上)。

2). activity.sendorderbroadcast

有序广播将按优先级依次传递广播。

前面的广播可以终止广播,并且可以把值传递给后面的接受者。

对于OrderedBroadcast而言,系统会根据接收者生命的优先级别顺序逐个执行接收者,

优先接收到Broadcast的接收者可以终止 Broadcast,

调用BroadcastReceiver的abortBroadcast()方法即可终止Broadcast。

如果 Broadcast被前面的接收者终止,后面的接收者就再也无法获取到Broadcast

3.如何发送广播?

发送广播可以通过:activity.sendbroad

        <receiver            android:name="com.joyfulmath.globalsearch.imagesearch.service.provider.ImageSearchReceiver"            android:exported="false" >            <intent-filter>                <action android:name="com.joyfulmath.intent.action.REBUILDIMAGE" />            </intent-filter>            <intent-filter>                <action android:name="android.intent.action.BOOT_COMPLETED" />            </intent-filter>        </receiver>
<intent-filter> 是broadcast receiver监听的广播。
本列监听
com.joyfulmath.intent.action.REBUILDIMAGE 和android.intent.action.BOOT_COMPLETED 两种广播。
com.joyfulmath.globalsearch.imagesearch.service.provider.ImageSearchReceiver是广播响应的类:
package com.joyfulmath.globalsearch.imagesearch.service.provider;import com.joyfulmath.globalsearch.imagesearch.service.ImageSearchBuildService;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;public class ImageSearchReceiver extends BroadcastReceiver {    public final static String TAG = "ImageSearch.Receiver";    public final static String BUILD_SEARCH_IMAGE_ACTION = "com.joyfulmath.intent.action.REBUILDIMAGE";        @Override    public void onReceive(Context context, Intent intent) {        String actionStr = intent.getAction();        if(actionStr.equals(BUILD_SEARCH_IMAGE_ACTION))        {            Log.i(TAG, "[onReceive]start rebuild all database");            //rebuild and update are all running in service!            startCustomService(context);        }        else if(actionStr.equals("android.intent.action.BOOT_COMPLETED"))        {            Log.i(TAG, "[onReceive]start servie BOOT_COMPLETED");            Intent intentservice = new Intent();            intentservice.setAction(ImageSearchBuildService.ACTION);            context.startService(intentservice);        }    }        private void startCustomService(Context context)    {        Intent intent = new Intent();        intent.setAction(ImageSearchBuildService.ACTION);        intent.putExtra(ImageSearchBuildService.ACTION_METHOD, ImageSearchBuildService.ACTION_REBUILD_DB);        context.startService(intent);    }            }
ImageSearchReceiver 会在接受到广播的时候,启动onReceive回调。
此处onReceive运行在主线程!
静态注册可以是activity或者service发送的广播。
而动态广播则正好相反。当动态广播注册时,接收广播,而注销时,无法接收广播。
MyReceiver receiver = new MyReceiver();        IntentFilter filter = new IntentFilter();filter.addAction("android.intent.action.MY_BROADCAST");        registerReceiver(receiver, filter);
动态广播一般用于一只app内部,而静态注册则是监听系统广播或者长期广播。

我们可以在监听某些操作的时候,启动service。
比如开机自启动程序。



更多相关文章

  1. Nginx系列教程(四)| 一文带你读懂Nginx的动静分离
  2. Android之BroadcastReceiver的使用
  3. Android用RecyclerView实现动态添加本地图片
  4. Android绘制一个三角形并且可动态改变颜色
  5. 【Android】 字体适配——不跟随系统字体大小、动态设置字体大小
  6. Android(安卓)BroadcastReceiver小结
  7. android 基于BroadcastReceiver广播 完全退出应用的实现代码 亲
  8. Android(安卓)获取cache缓存的目录路径
  9. Android(安卓)6.0后 apk权限默认开启

随机推荐

  1. android RelativeLayout 动态添加子View
  2. PMS/AMS剖析之应用开机自启动
  3. MVC、MVP的讲解,如优缺点,使用需求场景
  4. Android(安卓)studio 更新只显示"Downloa
  5. 音频采集(AudioRecorder)
  6. Android中xml解析--实现软件升级功能
  7. android 音量设置条
  8. Android(安卓)对Layout_weight属性完全解
  9. Android(安卓)OTA 升级之五:updater
  10. android studio 错误:“Gradle sync faile