IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android广播机制 -> 正文阅读

[移动开发]Android广播机制

1.广播机制的描述

Android的广播机制可以分为两部分:广播接收者,广播发送者,这和Qt的信号与槽机制相类似,都有信号的发送者和信号的接收者。信号和槽机制可用于Qt各个模块之间的通讯,可以传递信号以及数据。广播机制就是Andoid组件之间的通讯方式。有以下几种使用环境:

(1)同一app内部的同一组件内的消息通信(单个或多个线程之间);

(2)同一app内部的不同组件之间的消息通信(单个进程);

(3)同一app具有多个进程的不同组件之间的消息通信;

(4)不同app之间的组件之间消息通信;

(5)Android系统在特定情况下与App之间的消息通信。

Android中的广播主要分为两种类型:标准广播,有序广播

(1)标准广播是一种完全异步执行的广播,在广播发出后,所有的广播接收器都会在同一时刻接收这一条消息。这种广播效率高但同时也意味着它无法被截断。标准广播工作流如下图所示:

(2)有序广播是一种同步执行的广播,在广播发出后,在同一时刻只有一个广播接收器可以接收这条广播信号。只有前一个广播接收器完成自己所有的逻辑之后,广播才会继续传递。所以此时的广播接收器是有优先级区分的。有序广播的工作流程如下:

2.发送自定义广播

(1)首先要定义一个广播接收器来接收广播

public class MyReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(action.equals("com.example.brocast.MYBOARDCAST"))
{
Toast.makeText(context,"test",Toast.LENGTH_SHORT).show();
test test1 = (test) intent.getSerializableExtra("rolldata");
String test = test1.k;
Log.d("Mainactiv",test+"success");

}
else
{
Log.d("Mainactiv","error");
}
}

这里收广播信号并解析广播信号中传递的数据。

(2)需要在AndroidMainifest.xml文件中对这个广播接收器进行更改

<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.example.brocast.MYBOARDCAST"/>
</intent-filter>
</receiver>

这里可以看出让MyReceiver接收到一条值为“com.example.brocast.MYBOARDCAST”的广播,等会在发送广播时要发出这样一条广播

(3)发出广播

在这里创建了一个Button,通过Button的onClick来触发发送广播

首先注册广播接收器,创建IntentFiler的实例,然后添加上一步定义的广播值。

intentFilter = new IntentFilter();
intentFilter.addAction("com.example.brocast.MYBOARDCAST");
myReceiver = new MyReceiver();
registerReceiver(myReceiver,intentFilter);

然后通过onClick触发

public void onClick(View view)
{
test l = new test();
l.i = 1;
l.k = "kk";
l.y = 11;
Log.d("Mainactiv", l.k);
Intent intent = new Intent("com.example.brocast.MYBOARDCAST");

intent.putExtra("rolldata", l);

Toast.makeText(MainActivity.this,"ssssssss",Toast.LENGTH_SHORT).show();
//
sendBroadcast(intent);
}

动态注册的广播需要在使用结束之后注销、

@Override
protected void onDestroy(){
super.onDestroy();
unregisterReceiver(myReceiver);
}

到这一个完整的广播机制完成,可以实现实现信号的传递以及数据的流动。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:32:44  更:2022-04-09 18:33:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 20:45:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码