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

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厘米左右,土要湿润一些,模拟大葱的生长环境,吃的时候随时拔出来一颗,这样可以保存几个月之久大葱也非常新鲜。

  • 梭子蟹烧熟能放多久 梭子蟹多久能煮熟

    2、梭子蟹中含有丰富的蛋白质成分,而且又经过了油盐的烹饪,因此在一定温度条件下,很容易滋生细菌而变质,若是将烧熟的梭子蟹直接置于常温下存放,一般在只能保存6-8小时左右;3、若是将其置于冰箱保存,一般保存时间相对会长一些,但是也不宜超过一天,烧熟的梭子蟹保存时间越长,其鲜味越差,所以一般建议梭子蟹最好是现做现吃,尽量不要留到下一顿。

  • 南昌大学是国内双一流建设高校么(南昌大学入选部省合建)

    日前,教育部召开支持和提升中西部高等教育发展座谈会,部署启动部省合建工作。陈宝生表示,支持举措要体现合力,在不改变现有隶属关系和管理体制基础上,发挥部、省、校和支援方的作用。还要选优配强合建高校领导班子,将合建高校领导班子成员、校级后备干部列入直属高校干部培训计划。期待南昌大学发挥辐射带动作用我省有教育界人士表示,南昌大学作为我省唯一的211高校,此次入选“部省合建”高校是实至名归。

  • 直角锐角平角钝角之间的区别于联系是什么(直角锐角平角钝角之间的区别于联系是啥)

    接下来我们就一起去研究一下吧!等于180度的角是平角,大于90度小于180度的角是钝角。锐角、直角、钝角是对大于0°并且小于180°的角的一个分类,锐角、直角、钝角间的区别在于角的大小不同。

  • 极端危害环境是指(极端危害环境是指什么)

    极端危害环境是指极端危害环境是指在低温、高碱、高盐、高压、缺水等极其不适合生物生长的环境。而在这种恶劣贫瘠的极端环境中还能够很好地生活的微生物被称为极端微生物,这些极端微生物代表着生命活动的极限。大多数电子产品设计要求参数当中都有要求在极端环境下产品能够正常工作。极端温度极端温度是指产品工作的环境最高和最低温度范围。通常室温认为是25度。

  • 布面鼠标垫属于什么垃圾(布面鼠标垫属于哪些垃圾)

    以下内容希望对你有帮助!布面鼠标垫属于什么垃圾布面鼠标垫属于可回收垃圾可回收垃圾就是可以再生循环的垃圾。本身或材质可再利用的纸类、硬纸板、玻璃、塑料、金属、人造合成材料包装等,与这些材质有关的如:报纸、杂志、广告单及其它干净的纸类等皆可回收。另外包装上有绿色标章是属于要付费的双系统,属于可回收垃圾。

  • 民间谚语大全实用又有趣( 百姓民间气象谚语民谣大全)

    每月两节日期定,最多相差一两天,上半年来六甘一,下半年是八甘三。按照公历来推算,每月两气不改变。抓紧季节忙生产,种收及时保丰年。常刮西北风,近日天气晴。无风起横浪,三天台风降。当阴雨天气来临时,云层比较低,云底盖住山顶。乌头风白头雨“乌头”与“白头”是指两种云的云顶颜色来说的。卷积云一般出现在五千米以上的高空,形成后只能维持几分钟到一个多小时。出现这种云,表明地上空有低压槽移近。

  • 春季角膜炎一般几天好(春季角膜炎频发)

    角膜炎症必然使视力或多或少地受到影响,尤以炎症侵犯瞳孔区域者更为严重。角膜炎的发病症状一、外伤与感染角膜炎有哪些危害1、前房积脓严重病例多合并有虹膜睫状体炎。对各种原因引起的角膜上皮损伤或角膜溃疡,原则上禁用皮质类固醇,以免促使溃疡恶化,或延缓上皮损伤的愈合。角膜炎因角膜外伤,细菌及病毒侵入角膜引起的炎症。

  • 家居旺财的风水方法有哪些(家居旺财的风水方法介绍)

    家居旺财的风水方法有哪些门内是一处不可忽视旺财宝地,门口的玄关处是藏风聚气之地。厨房在风水中有财库说法,主掌内财运。因此,这些地方不能为空,要时时有食品;而且炉灶后方不宜空旷,以免影响财运。一般而言,在客厅大门对角45度位置,正是所谓的“明财位”。葫芦代表福禄,在财位摆放葫芦,旺财效果很显著;或悬挂一个葫芦,对提升财运也很有帮助。

  • 羊水少的原因(孕妇羊水少是什么原因引起的)

    胎儿畸形导致羊水少如果在孕早期或者中期发现羊水过少,则可能是因为宝宝有缺陷,导致不能产生足够的尿液来维持羊水循环。宝宝缺氧导致羊水少慢性缺氧会导致胎儿在子宫内发育迟缓,引起胎儿血液循环重分配,使血液主要供应脑和心脏,导致肾血流量下降,胎尿生成减少而致羊水过少。所以有人认为有些原因不明的羊水过少可能与羊膜本身病变有关。