学习学习之鸿蒙&Android

Android-四大组件

2021-07-25  本文已影响0人  书虫大王X

广播:
1、例子:当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度等等。
2、广播机制是不可替代的,它和Binder机制不一样的地方在于,广播的发送者和接收者事先是不需要知道对方的存在的,这样带来的好处便是,系统的各个组件可以松耦合地组织在一起,这样系统就具有高度的可扩展性,容易与其它系统进行集成。
3、 BroadcastReceiver的生命周期

  1. Register 注册
  2. SendBroadcast 发送信息
  3. onReceive 接收信息
  4. unRegister 注销

4、下面是广播的特性:

1、广播接收者的生命周期是非常短暂的,在接收到广播的时候创建,onReceive()方法结束之后销毁
2、广播接收者中不要做一些耗时的工作,否则会弹出Application No Response错误对话框
3、最好也不要在广播接收者中创建子线程做耗时的工作,因为广播接收者被销毁后进程就成为了空进程,很容易被系统杀掉
4、耗时的较长的工作最好放在服务中完成

5、Broadcast也有四种不同的分类:

  • 普通广播(Normal Broadcast): 所有监听该广播的接收器都可以监听到该广播,同一个级别的接受顺序是随机的或则说是无序的,接收器不能对收到的广播做任何处理,也不能截断广播继续传播。该种类的广播用sendBroadcast发送。
  • 系统广播(System Broadcast):常见系统广播: 监听网络变化、关闭或打开飞行模式、充电时或电量发生变化 、统启动完成后(仅广播一次)、按下照相时的拍照按键(硬件按键)时 、屏幕锁屏、设备当前设置被改变时(界面语言、设备方向等)、插入耳机时
  • 有序广播(Ordered Broadcast粘性广播(Sticky Broadcast)
  • App应用内广播(Local Broadcast)

6、有序广播:

  1. 按照接收者的优先顺序来接收广播,优先级别在intent-filter中的priority中声明,-10001000之间,值越大优先级越高,
  2. 可以终止广播的继续传播,接受者可以修改intent的内容。
  3. 同级别接收顺序是随机的,级别低的后收到
  4. 能截断广播的继续传播,高级别的广播接收器接收广播后能决定时候截断。能处理广播
  5. 同级别动态注册高于静态注册

7、App应用内广播(Local Broadcast):

1、其他App针对性发出与当前App intent-filter相匹配的广播,由此导致当前App不断接收广播并处理;
2、其他App注册与当前App一致的intent-filter用于接收广播,获取广播具体信息; 即会出现安全性 & 效率性的问题。

8、BroadcastReceiver有静态注册和动态注册两种方式,当用动态注册方式时要记得销毁的时候取消注册。静态注册是在AndroidManifest.xml文件中,所以一般情况下是不会移除的,比较占用资源。动态注册于onStart移除于onStop,所以建议使用动态注册。

a.使用它发送的广播将只在自身app内传播,因此你不必担心泄漏隐私的数据。
b.其他app无法对你的app发送该广播,因此你的app根本不可能收到非自身app发送的该广播,因此你不必担心有安全漏洞可以利用。
c.比系统广播更加高效。

activity:

正常点击返回键: onDestroy方法一定会执行;
从后台强杀分两种情况:

第一种:当前仅有一个activity,这时候,强杀,是会执行onDestroy方法的;
第二种:栈里面的第一个没有销毁的activity会执行ondestroy方法,其他的不会执行。比如说:从mainactivity跳转到activity-A(或者继续从activity-A再跳转到activity-B),这时候,从后台强杀,只会执行mainactivity的onDestroy方法,activity-A(以及activity-B)的onDestroy方法都不会执行;

在onCreate中:onCreate->onDestroy
在onStart中:onCreate->onStart->onStop->onDestroy
在onResume中:onCreate->onStart->onResume->onPause->onStop->onDestroy 之所以是这样,源码中给出了解释,activity会判断状态,只有没有被finish才会执行下一个生命周期。

  1. ActivityA.onPause
  2. ActivityB.onCreate
  3. ActivityB.onStart
  4. ActivityB.onResume
  5. ActivityA.onSaveInstanceState
  6. ActivityA.onStop
  1. ActivityB.onPause
  2. ActivityB.onSaveInstanceState
  3. ActivityB.onStop
上一篇 下一篇

猜你喜欢

热点阅读