Android-broadcast静态动态广播

广播的静态和动态类型

静态广播:

1.继承之broadcastreceiver

public class MyStaticBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);

        Toast.makeText(context,"zcxczcxstatic",Toast.LENGTH_SHORT).show();
        Log.d("zcx","staticbroad");
        //remoteViews.setTextViewText(R.id.widget_text, intent.getStringExtra("MESSAGE"));
        //context.startActivity(intent);
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("提示")
                .setMessage("收到BroadcastSend应用程序的广播")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });
        AlertDialog dialog = (AlertDialog) builder.create();
        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        dialog.show();

        //AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(
         //       context.getApplicationContext(), MyWidgetProvider.class), remoteViews);
    }

2.在AndroidManifest中定义

<receiver android:priority="1000"  android:name=".MyStaticBroadcastReceiver"
            android:permission="com.example.zcx.permission"
            android:process=":remote"
            >
            <intent-filter>
                <action android:name="android.zcx"></action>
            </intent-filter>
</receiver>>

3.client 调用

Log.d("zcx","sendStaticBroadcastButton");
                //Toast.makeText(getApplicationContext(),"zcxczcx",Toast.LENGTH_SHORT).show();
                Intent intent = new Intent();
                intent.setAction("android.zcx");
                //intent.setAction("android.appwidget.action.zcx");
                intent.addFlags(FLAG_INCLUDE_STOPPED_PACKAGES);
                //intent.putExtra("MESSAGE", editText.getText().toString());
                sendBroadcast(intent);

动态广播:

1.继承之broadcastreceiver

@Override
    public void onReceive(Context context, Intent intent) {
        //RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
        Log.d("zcx","MyDynamicBroadcastReceiver");
        //remoteViews.setTextViewText(R.id.widget_text, intent.getStringExtra("MESSAGE"));
        Toast.makeText(context,"zcxczcxDYnamic",Toast.LENGTH_SHORT).show();
        //AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(
         //       context.getApplicationContext(), MyWidgetProvider.class), remoteViews);
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("提示")
                .setMessage("收到BroadcastSend dYNAMIC应用程序的广播")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });
        AlertDialog dialog = (AlertDialog) builder.create();
        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        dialog.show();
    }

2.服务端代码注册启动

IntentFilter dynamic_filter = new IntentFilter();
        dynamic_filter.addAction("android.appwidget.action.zcx");
        myDynamicBroadcastReceiver = new MyDynamicBroadcastReceiver();
        registerReceiver(myDynamicBroadcastReceiver,dynamic_filter);

3.客户端调用

public void onClick(View v) {
                Intent intent = new Intent();
                //intent.setAction("android.zcx");
                intent.setAction("android.appwidget.action.zcx");
                //intent.addFlags(FLAG_INCLUDE_STOPPED_PACKAGES);
                //intent.putExtra("MESSAGE", editText.getText().toString());
                sendBroadcast(intent);
}

动态广播和静态广播的区别:

(1)动态注册广播不是常驻型广播,也就是说广播跟随Activity的生命周期。注意在Activity结束前,移除广播接收器。

静态注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。

这里采用动态和静态的实现方式,服务和客户端,服务要打开,客户才可以调用服务的广播接收,动态可以理解,静态为什么?

时间: 2024-08-14 16:57:29

Android-broadcast静态动态广播的相关文章

Android笔记(二十七) Android中的动态广播和静态广播

广播接收器注册一共有两种形式 : 静态注册和动态注册. 两者及其接收广播的区别: 1.动态注册的广播 永远要快于 静态注册的广播,不管静态注册的优先级设置的多高,不管动态注册的优先级有多低>\ 2.动态注册广播不是 常驻型广播 ,也就是说广播跟随activity的生命周期.注意: 在activity结束前,移除广播接收器. 静态注册是常驻型 ,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行. 3.在同一个优先级下,谁先启动的快,谁将先接收到广播. 动态注册代码: Upda

Android广播之注册广播(包括静态广播和动态广播的注册)源码分析

Android广播按发送方式分类有三种:无序广播.有序广播(OrderedBroadcast)和粘性广播(StickyBroadcast). 静态广播的注册流程: 在系统服务启动时会添加PackageManagerService,在该类的构造方法中就会对各个应用安装目录的apk文件进行扫描解析.先看下时序图: 先看PackageManagerService类的构造方法: // Keys are String (package name), values are Package. This als

Android 静态广播和动态广播接收顺序

Android广播有两个很重要的要素: 1 广播 - 用于发送广播 有序广播  -  被广播接收器接收后,可被终止,无法往下继续传达.         典型代表:短信广播 普通广播  -  发送至每一个已经注册(订阅)的广播接收器,无法被终止. 典型代表:开机启动广播 2 广播接收器 - 用于订阅广播后接收广播 静态注册广播 - 在AndroidManifest.xml中设置,程序不用启动亦可接收. 典型代表:很多开机启动的APP,都是接收开机启动广播带起服务的. 动态注册广播 - 代码中注册广

静态广播与动态广播

静态广播与动态广播区别: 两者及其接收广播的区别: 1.动态注册的广播 永远要快于 静态注册的广播,不管静态注册的优先级设置的多高,不管动态注册的优先级有多低>\ 2.动态注册广播不是 常驻型广播 ,也就是说广播跟随activity的生命周期.注意: 在activity结束前,移除广播接收器. 静态注册是常驻型 ,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行. 3.在同一个优先级下,谁先启动的快,谁将先接收到广播. 动态注册代码: UpdateBroadcast  br

Android Broadcast Receiver (广播接收者)

一.简介 Broadcast Receiver是广播接收器,接收自定义和系统的主播.也可以称为监听器. Broadcast Intent与Intent一样是通信的媒介,与Intent不同的是Broadcast Intent同时被多个组件接收. Broadcast Intent广播机制,广播源发出消息,通过AMS(Activity manager service),可以使多个组件接收同一个消息.与Broadcast Intent成对配合应用的是Broadcast Receiver广播接收器,用于,

动态广播与静态广播的区别

生存期:静态广播的生存期可以比动态广播的长很多,因为静态广播很多都是用来对系统时间进行监听,比如我们可以监听手机开机.而动态广播会随着context的终止而终止 优先级:动态广播的优先级比静态广播高 注册:动态广播无需在AndroidManifest.xml中声明即可直接使用(用receiver注册),也即动态:而静态广播则需要,有时候还要在AndroidManifest.xml中加上一些权限的声明.静态注册是当程序关闭后,如果有广播发过来,还能启动程序.动态注册的生命周期跟程序的生命周期是一样

静态广播与动态广播的区别

1.动态注册的广播永远要快于静态注册的广播,不管静态注册的优先级设置的多高,不管动态注册的优先级有多低 2.生存期,静态广播的生存期可以比动态广播的长很多,因为静态广播很多都是用来对系统时间进行监听,比如我们可以监听手机开机.而动态广播会随着context的终止而终止 3.动态广播无需在AndroidManifest.xml中声明即可直接使用,也即动态:而静态广播则需要,有时候还要在AndroidManifest.xml中加上一些权限的声明

Android系统中的广播(Broadcast)机制简要介绍和学习计划

在Android系统中,广播(Broadcast)是在组件之间传播数据(Intent)的一种机制:这些组件甚至是可以位于不同的进程中,这样它就像Binder机制一样,起到进程间通信的作用:本文通过一个简单的例子来学习Android系统的广播机制,为后续分析广播机制的源代码作准备. 在Android系统中,为什么需要广播机制呢?广播机制,本质上它就是一种组件间的通信方式,如果是两个组件位于不同的进程当中,那么可以用Binder机制来实现,如果两个组件是在同一个进程中,那么它们之间可以用来通信的方式

从零开始学android&lt;BroadCast广播.四十五.&gt;

与Service相似,在android中还有一种运行在后台的4大组件之一,他就是broadCcast,但是他不用考虑是否有接受的对象,只需要考虑发送即可. 要想使用BroadCast我们可以使用两种方法 第一:将broadCcast配置到配置文件当中. 第二:将broadCcast与class文件进行绑定. 下面我们分别来进行说明. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"