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);
}

效果:

         

最新文章

  1. SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)【转】
  2. LINUX下查看日志
  3. struts2 Result Type四个常用转跳类型
  4. Expender Header 与 Content互斥展示
  5. 第十一章 管理类型(In .net4.5) 之 管理对象的生命周期
  6. sqlserver 2008express版本启用混合登陆和sa
  7. JSTL时间比较,jstl日期比较,jsp比较时间
  8. OTN交换&amp;amp;P-OTN有效减少100G网络成本(一)
  9. SQL点滴18—SqlServer中的merge操作,相当地风骚
  10. (汉化改进作品)BruteXSS:Xss漏洞扫描脚本
  11. LoadRunner性能测试工具
  12. 2. VIM 系列 - 初探vim配置文件
  13. DevOps时代,企业数字化转型需要强大的工具链
  14. [NewLife.XCode]实体类详解
  15. [CentOS]Failed to start OpenSSH server daemon
  16. lnmp 基础设置
  17. Hdu1010 Tempter of the Bone(DFS+剪枝) 2016-05-06 09:12 432人阅读 评论(0) 收藏
  18. React Native创建一个APP
  19. *使用配置类定义Codeigniter全局变量
  20. python数据类型详解(全面)

热门文章

  1. Linux学习系列之Nginx调优实战
  2. shred_linux_unix
  3. 简易的RPC调用框架(大神写的)
  4. Oracle中 HWM与数据库性能的探讨
  5. poj-3253-Fence Repair(哈夫曼)
  6. 传统项目利用Hystrix实现热点接口的服务隔离
  7. 七、配置ssh keys连通github跟ssh-agent
  8. js中的event
  9. FORALL用法小结
  10. python 发送带附件的 邮件