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 ...
随机推荐
- jquery中$.ajax的$.get与$.post使用
<script type='text/javascript' src='http://ajax.useso.com/ajax/libs/jquery/1.7.2/jquery.min.js?ve ...
- javascript判断浏览器是否是隐私模式
判断浏览器是否是隐私模式,隐私模式下有写api不可用 1. try { localStorage['test'] = 'test'; //localStorage和sessionStorage都存在, ...
- Animator Override Controllers 学习及性能测试
本文由博主(YinaPan)原创,转载请注明出处:http://www.cnblogs.com/YinaPan/p/Unity_AnimatorOverrideContorller.html The ...
- 你好,C++(31)我终于找到对象啦!6.1 从结构化设计到面向对象程序设计
第6章 当C++爱上面向对象 很多第一次进入C++世界的人都会问:C++中的那两个加号到底是什么意思啊? C++是由C语言发展而来的,它比C语言多出的两个加号,实际上是C语言的自增操作符,表示C++语 ...
- When Colon Scripting is comming (脚本最佳体验)
当冒号脚本来临-- 脚本最佳体验 冒号指派 说明; 冒号替代等号指派赋值,当命名声明指派时指定.相当于声明当前作用域的一个名字指派. 当对指定对象的属性赋值时候,依旧请使用等号.即不废弃等号赋值功用, ...
- Date.prototype.format,js下的时间格式处理函数
该方法在date的原型中扩展了format方法,使其可以方便的格式化日期格式输出. Date.prototype.format =function(format) { var o = { , //mo ...
- id 自增------删除数据后恢复到删除前自增id
删除数据后,执行下面语句: ALTER TBALE TableName AUTO_INCREMENT=1 mysql删除比较 一.DROP drop table tablename 绝招:删除内容和 ...
- 习题二:string数组应用
说明: 读字符串char buf[100]="xxx:yyy:zzz:aaa:bbb" 按“:”进行分解到string数组中去 逻辑: 通过指针遍历整个字符串 遇到'\0'表示字符 ...
- cms中if标签的使用
<#if order.EnFriendly ?? && order.EnFriendly==1> <td class="text-center"& ...
- asp.net(C#)写SQL语句技巧
/*添加SQL*/string fields = "";string values = "";fields += "xm"; values ...