公司法
当前位置: 首页 法律大全

broadcaststate 配置(BroadcastReceiver生命周期探讨)

时间:2023-05-23 作者: 小编 阅读量: 1 栏目名: 法律大全

前言之前做线控耳机连点两下切下一首歌的需求时,曾经尝试在BroadcastReceiver中用一个成员变量保存最后一次按下的时间,但后来发现这个值一直是初始值,对它赋值后,再次收到Intent时发现它的值又变成初始值了.,下面我们就来说一说关于broadcaststate配置?我们一起去了解并探讨一下这个问题吧!

broadcaststate 配置?前言之前做线控耳机连点两下切下一首歌的需求时, 曾经尝试在BroadcastReceiver中用一个成员变量保存最后一次按下的时间, 但后来发现这个值一直是初始值, 对它赋值后, 再次收到Intent时发现它的值又变成初始值了.,下面我们就来说一说关于broadcaststate 配置?我们一起去了解并探讨一下这个问题吧!

broadcaststate 配置

前言

之前做线控耳机连点两下切下一首歌的需求时, 曾经尝试在BroadcastReceiver中用一个成员变量保存最后一次按下的时间, 但后来发现这个值一直是初始值, 对它赋值后, 再次收到Intent时发现它的值又变成初始值了.

后来看到一些问题, 问BroadcastReceiver的生命周期, 按理说它就一个onReceive能有什么生命周期, 其实这里问的生命周期和我们平时说的Activity的生命周期还是有区别的.

BroadcastReceiver对象的生命周期

问题的根源在于, 在AndroidManifest.xml中注册的BroadcastReceiver, 每次收到一个Intent, 也就是onReceive被回调的时候, 这个BroadcastReceiver都是新创建出来的, 官方文档中写:

A BroadcastReceiver object is only valid for the duration of the call to onReceive(Context, Intent). Once your code returns from this function, the system considers the object to be finished and no longer active.

也就是说, 出了onReceive, 这个BroadcastReceiver对象的生命周期就已经到头了, 这也是为什么我们不能在onReceive中进行一些异步操作的原因, 有可能异步操作还没完成, BroadcastReceiver所在的进程就被kill了.

表现出来的结果就是, BroadcastReceiver中的成员变量无法保存它们的值, 因为它们每次都是重新创建的, 之前的已经随着BroadcastReceiver对象被销毁了.

但是有一种情况, BroadcastReceiver的成员变量是可用的, 那就是动态注册的BroadcastReceiver. 动态注册的BroadcastReceiver对象的生命其实是受我们控制的.

实际测试, 使用Context.registerReceiver和Context.unregisterReceiver注册的BroadcastReceiver每次收到广播都是使用我们注册时传入的对象处理的, 这也是符合我们代码上的逻辑的. 当然, 此时静态变量也是可用的.

BroadcastReceiver所在进程的生命周期

对于那种在AndroidManifest.xml中静态注册的BroadcastReceiver, 成员变量是没法用了, 有人说, 是不是用static变量就可以了呢, 某些情况下是可以的, 什么情况呢, 就是进程不会被kill的情况.

官方文档里面有一段

Once you return from onReceive(), the BroadcastReceiver is no longer active, and its hosting process is only as important as any other application components that are running in it.

在AndroidManifest.xml中静态注册的BroadcastReceiver的onReceive被回调时, 有可能这个进程只承载了这个BroadcastReceiver, 比如我们的应用没有运行的情况, 等onReceive返回, 这个时候我们的进程的会被视为空进程(empty process), 此时Android有极大可能回收掉空进程, 这种情况下静态成员变量也无法保存值了.

如果我们的程序正在运行, 则Android不一定会回收掉我们的进程, 因为此时我们的进程级别会以进程中承载的级别最高的组件为准. 在我的实际项目中, 我是在播放歌曲的情况下监听线控耳机的按下Intent, 这个时候我的应用是有一个前台服务播放歌曲的, 此时我的进程至少是可见进程(visible process)级别, 几乎不会被Android kill掉, 所以我可以在BroadcastReceiver中使用一个静态成员变量记录上一次点击的时间.

    推荐阅读
  • 怎样养好盆栽百合花(盆栽百合花又香又高贵)

    怎样养好盆栽百合花百合开花香气浓郁,艳丽而娇嫩,含苞待放,芬芳吐蕊,是特别深受人们喜爱的一种花卉。在选择的时候一定要选择正规的商家,选择对版的百合才能符合自己的心愿。大约两个月左右,就可以看到百合花开出艳丽的花朵了。百合花开完花之后不要丢掉,直接把它的残花修掉就可以了。

  • 绵阳市有哪些旅游景点好玩(旅行攻略之四川省绵阳市)

    绵阳又称为“中国科技城”,位于四川西北部盆地。风景优美,家人爬爬山不错,有天然溶洞)六:越王楼七:潼川古城(历史悠久,晚上夜景很不错。我国两弹就是在这里研究成功的。是个不错的打卡地)以上十个都是不错的景点,绵阳美食也有很多,米粉、锅盔、冒菜、酥饼、凉粉、醪糟、片粉、还有很多美食,大家可以去品尝一下

  • 忍界大战我爱罗带什么秘卷(这样带秒杀敌人)

    忍界大战我爱罗带什么秘卷带水龙卷和查克拉,水龙卷追踪可以更好地封走位,查克拉能配合大招迅速击杀敌人。在第四代风影遇刺不久后继任成为第五代风影,领导并守护着砂隐村,曾一度被“晓”抽去了一尾守鹤而死亡,最后被千代牺牲性命复活。第四次忍界大战中,我爱罗担任忍者联军队长与第四部队统领。战争结束后,我爱罗仍继续担任风影的职位,还和鸣人及木叶村等人维持着友好的关系。

  • 长春有哪些专科学校(长春的专科学校有哪些)

    师范教育部组建),是吉林省、长春市政府在“十二五”期间重点扶持建设的全省唯一一所师范高等专科学校。长春医学高等专科学校,是经教育部批准的全日制普通高等专科学校,“卓越医生教育培养计划”试点高校。

  • 明日之后夜魔是什么(夜魔特点介绍)

    明日之后夜魔是夜晚出现的野怪每当夜幕降临时,玩家总会收到一条特殊的提醒,那就是连续不断的紧凑三声喇叭声,并提示玩家“喇叭声唤醒了什么”,下面我们就来聊聊关于明日之后夜魔是什么?明日之后夜魔是什么明日之后夜魔是夜晚出现的野怪。其实,这个喇叭声唤醒的就是“夜魔”,出现这条提醒之后,也将意味着在不久过后有一位夜魔大人将亲自光顾你的家园,并向你寒暄温暖,表达最衷心的祝福!

  • 三本末世流小说推荐(10本末日基建玄幻类文)

    幸好“末日营地”游戏自由度极高。公测结束,她满心期待游戏正式运营,不料全球沦为游戏场……袁香儿学艺初成,入妖林,欲擒一小妖,契之以为使徒。袁香儿心中不忍,将其带回家中,哺食裹伤,悉心照料。至此之后,每天外出归来的袁香儿欣喜的发现家门口总会多出一些奇怪的礼物。小招待所内水电齐全,只要支付晶核就可以获得安全的居所美味的食物。

  • 哄女朋友的暖心故事(哄女友开心的故事)

    问老总老总,大家这儿有木有红萝卜?仔猪太胖了,猪妈妈担忧仔猪的身心健康,让仔猪减肥瘦身,猪妈妈每日监管仔猪慢跑。此刻小狗狗来找仔猪,猪妈妈恰好让小狗狗监管仔猪,小狗狗同意了猪妈妈。临行的情况下,猪妈妈刻意交待仔猪不可以喝凉水和吃凉的物品。仔猪开心的吃完起來,但是还没有等吃了,仔猪就肚子痛的倒在了地底,此刻猪妈妈正巧回家,立刻带著仔猪来到医院门诊。

  • 2060打游戏好吗(2060不仅节目全网出圈广受好评)

    10月22日起,江苏卫视推出了一档国产原创动漫形象舞台竞演节目《2060》,在每周五晚间时段播出。截至目前,《2060》已播出五期节目,CSM63城平均收视2.34%、收视份额11.57%。《2060》自开播以来,凭借新颖的节目模式以及弘扬中国传统文化的内核,获得了业内外各方的关注和肯定。文章还着重表扬了《2060》节目用好国风元素弘扬优秀传统文化,并采用年轻化表达贴近青少年喜好。

  • 新宝骏十年磨剑苦工一朝转型成功(新宝骏形象店什么样)

    在服务方面,新宝骏将会提供全生命周期的实施在线服务,通过APP实现从预约到服务完结的全面在线化。不仅如此,新宝骏还将提升服务水平,将会对到店的每一位消费者提供6对1的专属服务,包括店长、销售顾问、服务顾问、技术主管、保险专员和客服专员,给用户提供实时在线响应,为用户日常用车进行保驾护航。而且,新宝骏提供了在线预约和上门取车保养的服务,让您可以足不出户完成车辆保养。

  • 贵州赤水丹霞大瀑布美景迷人(赤水大瀑布难得一见的)

    在贵州赤水丹霞旅游区大瀑布景区,壮美的大瀑布气势恢宏。据了解,按照疫情防控要求,游客在进入景区时需要进行扫码、测温。景区还采取了门票线上预约、错峰游览等措施。此外,为应对假期客流,当地加强了车辆运力调控、增加工作人员值守,优化客流引导。