我是靠谱客的博主 糊涂玉米,最近开发中收集的这篇文章主要介绍android 广播原理,Android广播,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

BroadCastReceiver(广播接收者)可以以异步机制的方式处理UI主线程与其它组件之间的消息传递,也就是说他不会使主UI卡住。

一:原理

接收者与发送者之间不会相互等待。消息的发送者不必指定谁来接受广播,而是可以直接发送广播,只要设置一个用于匹配的标志,然后发送消息,不用等待接收者的响应,继续做自己的事情。可以接受到广播的组件(也就是继承自BroadCastReceiver的组件)若能匹配信息,就可以接受信息,从而完成某些操作。

二:自己发送的广播

1:创建

(1)发送者通过Intent对象携带数据信息,调用sendBroadcast(intent对象)的方法,发送消息

(2)能接受广播的组件必须继承自BroadCastReceiver,重写onReceiver方法,通过参数中的intent对象的get***Extra("键")的方法获得发送过来的消息。

(3)最重要的是BroadCastReceiver组件需要注册,注册的方式为:

2:实现

(1)主Activity(发送者)public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//界面中存在一个按钮,让按钮去触发发送广播的功能

findViewById(R.id.send).setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

//实例化Intent对象

Intent intent = new Intent(MainActivity.this, MyReceiver.class);

//Intent对象携带消息

intent.putExtra("name", "张三");

//发送广播(消息)

sendBroadcast(intent);

}

});

}

}

(2)接收者

//继承自BroadcastReceiver,成为广播的接收者

public class MyReceiver extends BroadcastReceiver{

@Override

public void onReceive(Context context, Intent intent) {

//通过Intent对象获得发送过来的消息,输出在控制台上

System.out.println(intent.getStringExtra("name"));

}

}

(3)结果,在控制台输出

01-04 12:08:01.500: INFO/System.out(307): 张三

三:系统发送的广播

1:常见的系统广播

2:创建

(1):在onCreate方法中,动态注册广播的接收者。所谓动态注册,就是不在xml文件中注册,而是在代码中注册。

registerReceiver(接受者对象, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));//第二个参数为IntentFilter对象,他的参数为通过Intent对象获得的系统广播常量值,通过与这个常量值的匹配完成某些操作

(2):在onStop方法中,取消注册(目的是节约资源)

unregisterReceiver(接受者对象);

(3):在广播的接受者中通过比对发送者发送的系统广播,来完成某些操作(见例子)

3:具体实现

(1)主Activity中通过动态注册的方式完成系统广播的发送与接受

public class MainActivity extends Activity {

private TextView tv;//声明控件

//广播接收者对象

private BroadcastReceiver receiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

//通过匹配是不是电池电量变化系统广播,而完成操作

//intent.getAction()获得是发送过来的广播

if(intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())){

//电池电量当前值,单位为百分比,其中键值level为系统固定

int level = intent.getIntExtra("level", 0);

//电池电量总值,其中键值scale为系统固定

int scale = intent.getIntExtra("scale", 100);

//在主Activity中的TextView控件中显示当前电量的百分比

tv.setText(level*100/scale+"%");

}

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tv = (TextView) findViewById(R.id.tv);

//动态注册

registerReceiver(receiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

}

@Override

protected void onStop() {

super.onStop();

//取消注册,节约资源

unregisterReceiver(receiver);

}

}

(2)结果

a5b52d5afab057a964ec8e055d903a63.png

广播,Activity,Service之间可以相互的作用,从而达到某些我们意向的效果。他们之间的组合作用,见下一篇博文咯。。。。72ff99c9ea500e990b96a2de9610edd0.png

最后

以上就是糊涂玉米为你收集整理的android 广播原理,Android广播的全部内容,希望文章能够帮你解决android 广播原理,Android广播所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部