zoukankan      html  css  js  c++  java
  • Android四大组件之BroadCast

    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。
    比如开机自启动程序。



  • 相关阅读:
    20170620_javaweb_小结
    win7电脑关机时间长怎么办
    hadoop环境搭建之关于NAT模式静态IP的设置 ---VMware12+CentOs7
    初识bigdata时的一些技能小贴士
    mysql 免安装版 + sqlyog 安装 步骤 --- 发的有点晚
    Python开发之IDE选择
    Python解释器换源
    Anaconda安装与使用
    安装Python环境
    Python和其他编程语言
  • 原文地址:https://www.cnblogs.com/deman/p/4236755.html
Copyright © 2011-2022 走看看