android broadcastreceiver 重复创建和无法接受消息问题

今天碰到了一个问题 就是使用广播做一个全局弹窗的重复弹窗问题 特此记录一下 填个坑
第一 说一下使用广播做一个全局弹窗问题

首先是注册广播 我使用的是动态注册 (细节就不都说了) 设置高优先级 尽量做到保活 这里说一下第一个要注意的地方 就是广播注册问题 重复注册 我的方法是 在注册前 先判断一下是否存在 如果存在就返回 如果不存在就new 一个 (也可以使用单例去控制一下)我就遇到了重复创建 重复弹窗问题 我在oncreat中创建的 最多居然一次弹出五个弹窗 很是烦恼
第二 创建全局时 需要创建一个堆栈管理者 管理activity 写一个activity的高级类 所有的activity都继承这个高级类 在高级类将每一个activity加入堆栈 然后把最顶层的activity取出 传递给dialog 做上下文 当就收到广播时 就弹出 所以无论那个页面都可以弹出 其实就是弹出在当前的activity
还有就是无法接受广播问题 其实就是我们注册有问题 动态注册时 会和当前的activity 生命周期保持一致 onCreate注册创建 onDestroy 解绑 所以我是在程序入口mainActicity中使用的 当广播销毁时 那就是退出程序了 所以接不接收 谈不弹窗也就无所谓了 还有就是当广播解绑后 第二次注册时 不要判断这个广播有没有创建 而是要判断他有没有注册 要知道 广播解绑后这个对象并没有销毁 对象还是存在的 只是目前处于不活动状态而已 所以你可以直接判断当前广播是不是为空 如果为空 就直接注册 如果不为空 就直接解绑 这就不会重复注册 也不会导致无法接收消息

你可能感兴趣的:(android开发)