Android-广播总结
1.发送广播:
其实发送广播属于隐式意图
1.1.系统发出的广播(有序广播/无序广播)
1.2自己发出的广播(有序广播/无序广播)
2.订阅广播:
2.1.AndroidManifest.xml形式订阅接收者
2.2.Java代码订阅广播(onCreate方法中订阅接收者(能够发现广播接收者是唯一可以new的组件),onDestroy方法里解除订阅,如果不解除订阅会引发泄露异常)
3.广播的生命周期方法:就一个方法
onReceive(Context context, Intent intent)
广播接收者组件,什么时候被激活,当执行 onReceive(Context context, Intent intent) 的时候被激活
广播接收者组件,什么时候被回收,当执行完 onReceive(Context context, Intent intent) 后,系统会自动回收
4.广播接收者,耗时操作
onReceive(Context context, Intent intent) 方法不能执行耗时操作
因为广播接收者是和Activity一样在主线程运行(Activity是五秒未响应就ANR异常,而广播接收者十秒未响应就ARN异常)
如果一定要在广播接收者里执行耗时操作,怎么办?
答:不能开启子线程,因为在执行完生命周期方法(onReceive(Context context, Intent intent) )后,系统会自动回收广播接收者,所以不能开子线程
可以去开启一个服务-->服务再去开启主线程执行耗时操作 content.startService();
5.广播接收者,去跳转Activity
AndroidManifest.xml 订阅 接收者
<!--
订阅(Xml形式订阅接收者)
订阅接收者:专门去跳转Activity
-->
<receiver android:name=".br.StartActivityBroadcastReceiver"> <intent-filter> <action android:name="my_customo.start_action_action" /> <data android:scheme="startActivityScheme" /> </intent-filter> </receiver>
接收者:
package liudeli.croadcast1.br; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent; import liudeli.croadcast1.MainActivity; /**
* 此接收者,专门用来跳转Activity
*/
public class StartActivityBroadcastReceiver extends BroadcastReceiver { @Override
public void onReceive(Context context, Intent intent) {
startActivity(context);
} /**
* 启动另外一个Activity
*/
private void startActivity(Context context) {
Intent intent = new Intent(context, MainActivity.class);
/**
* 注意:⚠️ 在非Activity的地方 去启动Activity,必须加入以下标记
* intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
*/
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}
发送广播:
/**
* 发送广播给 ---> 接收者
*/
public void startActivity(View view) {
/**
* 订阅的信息:
* <intent-filter>
*
* <action android:name="my_customo.start_action_action" />
*
* <data android:scheme="startActivityScheme" />
*
* </intent-filter>
*/
/**
* 发送广播原则,接收者怎么去订阅的,我就怎么去发送广播
*/
Intent intent = new Intent();
intent.setAction("my_customo.start_action_action");
intent.setData(Uri.parse("startActivityScheme:我要激活另外一个Activity"));
sendBroadcast(intent);
}
效果:
Android-广播总结的更多相关文章
- Android随笔之——Android广播机制Broadcast详解
在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理.这个广播跟我们传统意义中的电台广播有些相似之处.之所以叫做广播,就 ...
- Android广播机制的深入学习
部分内容转载自http://www.cnblogs.com/lwbqqyumidi/p/4168017.html 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者 ...
- Android总结篇系列:Android广播机制
1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...
- Android广播机制概述
1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...
- Android广播机制:Broadcast
转载:Android总结篇系列:Android广播机制 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广 ...
- Android(java)学习笔记172:BroadcastReceiver之 Android广播机制
Android广播机制 android系统中有各式各样的广播,各种广播在Android系统中运行,当"系统/应用"程序运行时便会向Android注册各种广播.Android接收到广 ...
- Android广播机制(转)
1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...
- Android广播的发送与接收
Android广播的发送与接收 效果图 广播发送 广播分为有序广播和无序广播 有序广播与无序广播的区别 无序广播:只要是广播接收者指定了接收的事件类型,就可以接收到发送出来的广播消息.不能修改消息. ...
- Android广播机制
原文出处: Android总结篇系列:Android广播机制 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的 ...
- 【Android】Android 广播大全
[Android]Android 广播大全 String ADD_SHORTCUT_ACTION 动作:在系统中添加一个快捷方式. String ALL_APPS_ACTION 动作:列举所有可用的应 ...
随机推荐
- 六.jQuery源码分析之jQuery原型属性和方法
97 jQuery.fn = jQuery.prototype = { 98 constructor: jQuery, 99 init: function( selector, context, ro ...
- 浏览器禁用Cookie
做JavaWeb的都知道Session的底层是使用Cookie来实现的,服务器端会在本地文件中保存session信息,并将sessionID发给客户端(浏览器),浏览器就会把这个sessionID(准 ...
- JDK、Spring、Quartz等几种不同定时器的用法,以及cronExpression表达式定义
referenc:https://blog.csdn.net/clementad/article/details/42042111 下面介绍几种常用的定时器及其实现方法: 第一种:Timer和Time ...
- pandas read_csv读取大文件的Memory error问题
今天在读取一个超大csv文件的时候,遇到困难:首先使用office打不开然后在python中使用基本的pandas.read_csv打开文件时:MemoryError 最后查阅read_csv文档发现 ...
- Snackbar学习笔记
官方推荐使用Snackbar代替Toast Paste_Image.png Snackbar使用其实就是一句话,跟toast很相似: Snackbar.make(view,"消息已发出& ...
- Discuz 任务、道具、任务和验证类插件制作
一.广告类脚本位置:source/class/adv/adv_name.php语言包位置:source/language/adv/lang_name.php <?php class adv_na ...
- sql中纵表变横表
纵表格式如图所示: 查询sql语句如下: ),content)content,Date from SummerChina ' 变成横表如图所示: 纵表变横表sql语句如下: select Time, ...
- 7.25 8figting!
TEXT 87 Fund management基金管理 A Miller's tale 米勒传奇(陈继龙编译) Dec 7th 2006 From The Economist print edit ...
- java编写binder服务实例
文件目录结果如下: 一. 编写AIDL文件 IHelloService.aidl: /** {@hide} */ interface IHelloService { void sayhello(); ...
- 字段名与属性名不一致问题 通过resultMap解决