android在广播接收器BroadcastReceiver里面再进行发送广播,造成当前广播接收器不断循环执行问题
最近在公司处理项目时,用到锁屏状态弹出activity进行提示,类似QQ消息弹屏提示的功能。当中用到了,假如该弹出activity已经位于锁屏界面外时,将不进行再次弹窗,而是发送广播进行通知数据更新,但是在广播接收器里面的某个步骤进行了再次发送通知的操作,发现该广播接收器变成了一个死循环的执行。经过仔细检查,发现没有任何一处用错action。 最终将该广播接收器里面的发送广播语句注释,死循环不在。代码如下:
注:里面的所有action都经过仔细检查,使用均正确,没任何错误,或者引用错误。
package com.guc.doctorwarn.receiver;
import com.guc.doctorwarn.LocalScreenMessageActivity;
import com.guc.doctorwarn.utils.WakeLock;
import com.library.helper.AppIsBackground;
import com.library.util.PreferencesUtil;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
/**
* 该广播用于接收锁屏提示广播
*
* @author Administrator
*
*/
public class LocalScreenMessageReceiver extends BroadcastReceiver {
public static final String LocalScreenMessageAction = "com.guc.doctorwarn.LocalScreenMessageAction";
@Override
public void onReceive(Context context, Intent intent) {
/**
* 如果应用在后台,则进行解锁屏幕提示,否则不进行提示
*/
// Log.i("a", ">>>锁屏消息广播接收器接收到消息<<<");
// Log.i("a",
// ">>>应用是否在后台<<<"
// + AppIsBackground
// .isApplicationBroughtToBackground(context));
if (intent.getAction().equals(LocalScreenMessageAction)) {
if (AppIsBackground.isApplicationBroughtToBackground(context)
&& !PreferencesUtil.getBoolean(context, "screen")) {
WakeLock.acquireCpuWakeLock(context);
Intent localmessage = new Intent();
localmessage
.setClass(context, LocalScreenMessageActivity.class);
localmessage.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
localmessage.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(localmessage);
} else if (!AppIsBackground
.isApplicationBroughtToBackground(context)
&& PreferencesUtil.getBoolean(context, "screen")) {
// Intent updatamessage = new Intent();
// updatamessage
// .setAction(LocalScreenMessageActivity.UpLocalMessageDataAction);
// context.sendBroadcast(intent);
//
Log.i("a", "广播更新锁屏activity执行");
}
}
}
}
总结:在Android开发过程中,广播接收器里面不可以再次发送广播,否则该广播接收器的运行会进入一个死循环的状态。
android在广播接收器BroadcastReceiver里面再进行发送广播,造成当前广播接收器不断循环执行问题的更多相关文章
- android广播接收器BroadcastReceiver
首先看一下什么是 BroadcastReceiver BroadcastReceiver:直译是"广播接收者",所以它的作用是用来接收发送过来的广播的. 那我们有必要知道:什么是广 ...
- Android学习总结(五)———— BroadcastReceiver(广播接收器)的基本概念和两种注册广播方式
我们学完了Android四大组件的Activity和Service了,接下来我们一起来学习Android四大组件的第三个吧:BroadcastReceiver(广播接收者),计划如下图: 一.Broa ...
- Android - 广播接收者 - BroadcastReceiver
BroadcastReceiver 介绍: 广播是一种广泛运用的在应用程序之间传输信息的机制 .而 BroadcastReceiver 是对发送出来的广播 进行过滤接收并响应的一类组件 接受一种或者多 ...
- Android学习笔记--Broadcast, BroadcastReceiver(广播)
参考资料:http://www.cnblogs.com/playing/archive/2011/03/23/1992030.html 在 Android 中使用 Activity, Service, ...
- Android学习笔记_19_广播接收者 BroadcastReceiver及其应用_窃听短信_拦截外拨电话
一.广播接收者类型: 广播被分为两种不同的类型:“普通广播(Normal broadcasts)”和“有序广播(Ordered broadcasts)”. 普通广播是完全异步的,可以在同一时刻(逻辑上 ...
- Android系统编程入门系列之广播接收者BroadcastReceiver实现进程间通信
在前边几篇关于Android系统两个重要组件的介绍中,界面Activity负责应用程序与用户的交互,服务Service负责应用程序内部线程间的交互或两个应用程序进程之间的数据交互.看上去这两大组件就能 ...
- Android(java)学习笔记179:BroadcastReceiver之 有序广播和无序广播(BroadcastReceiver优先级)
之前我们在Android(java)学习笔记178中自定义的广播是无序广播,下面我们要了解一下有序广播: 1. 我们首先了解一下有序广播和无序广播区别和联系? (1) 有序广播> 接受者 ...
- Android中广播接收者BroadcastReceiver详解
1. 接收系统的广播步骤 (1) 新建一个类继承BroadcastReceiver 以监听sd卡状态的广播接收者为例 public class SdCardBroadcastReceiver ext ...
- 自定义广播(BroadcastReceiver)事件 --Android开发
本例演示自定义广播事件.我们需要做的是,在主活动中写发送广播的代码,然后在接收广播的类中写接收广播的代码. 1.主活动中点击按钮后发送广播 MainActivity.java: public clas ...
随机推荐
- Objective-C学习篇02—封装
面向对象的三大特性:封装.继承和多态 封装目的就是将数据隐藏起来,外界只能通过这个类的方法(接口)才能访问或者设置里面的数据,不可以在外部直接修改或者访问里面的数据,通常使用方法来达到封装一个类的目的 ...
- 使用<span>标签为文字设置单独样式
这一小节讲解<span>标签,我们对<em>.<strong>.<span>这三个标签进行一下总结: 1. <em>和<strong& ...
- 当OOP语言RAII特性发展到functional形式的极致
本文主要站在C++程序员的思维角度思量. functional之路 lambda表达式 lambda表达式,是一段代码片段.函数实现体中出现的可重用的代码块. 在C++之前,C语言最小可复用流程模块, ...
- php中session的运行机制
在PHP中session默认是以文件的形式存储于服务器的 而客户端和服务端则是通过session_id来完成握手的,默认情况下PHP会将session_id存储于cookie中,用户每次请求时该ses ...
- Spring+SpringMVC+Mybatis+MAVEN+Eclipse+项目完整环境搭建
1.新建一个Maven项目,创建父项目. 2.创建子项目模块 3.创建javaWeb项目 4.创建后的项目目录结构 5.Maven文件配置 parent父项目pom.xml文件配置 <?xml ...
- grails通过findBy或findBy查找的结果集进行排序
原文:http://grails.org/doc/2.3.x/ref/Domain%20Classes/list.html list Purpose Lists instances of the do ...
- Linux下设置静态IP和获取动态IP的方法
Linux下为机器设置静态IP地址: vim /etc/sysconfig/network-scripts/ifcfg-eth0 修改这个文件内容如下形式: # Intel Corporation ...
- socket函数
为了执行网络IO,一个进程必须做的第一件事就是调用socket函数,指定期望的通信协议类型 int socket(int family,int type,int protocol); 其中,famil ...
- Javascript图片轮播
原文链接:http://www.imooc.com/article/7393 编辑HTML代码: <div id="wrap"><!--图片展示区--> & ...
- poj 2892 &&hdu 1540 Tunnel Warfare
http://poj.org/problem?id=2892 #include <cstdio> #include <cstring> #include <algorit ...