最近在公司处理项目时,用到锁屏状态弹出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里面再进行发送广播,造成当前广播接收器不断循环执行问题的更多相关文章

  1. android广播接收器BroadcastReceiver

    首先看一下什么是 BroadcastReceiver BroadcastReceiver:直译是"广播接收者",所以它的作用是用来接收发送过来的广播的. 那我们有必要知道:什么是广 ...

  2. Android学习总结(五)———— BroadcastReceiver(广播接收器)的基本概念和两种注册广播方式

    我们学完了Android四大组件的Activity和Service了,接下来我们一起来学习Android四大组件的第三个吧:BroadcastReceiver(广播接收者),计划如下图: 一.Broa ...

  3. Android - 广播接收者 - BroadcastReceiver

    BroadcastReceiver 介绍: 广播是一种广泛运用的在应用程序之间传输信息的机制 .而 BroadcastReceiver 是对发送出来的广播 进行过滤接收并响应的一类组件 接受一种或者多 ...

  4. Android学习笔记--Broadcast, BroadcastReceiver(广播)

    参考资料:http://www.cnblogs.com/playing/archive/2011/03/23/1992030.html 在 Android 中使用 Activity, Service, ...

  5. Android学习笔记_19_广播接收者 BroadcastReceiver及其应用_窃听短信_拦截外拨电话

    一.广播接收者类型: 广播被分为两种不同的类型:“普通广播(Normal broadcasts)”和“有序广播(Ordered broadcasts)”. 普通广播是完全异步的,可以在同一时刻(逻辑上 ...

  6. Android系统编程入门系列之广播接收者BroadcastReceiver实现进程间通信

    在前边几篇关于Android系统两个重要组件的介绍中,界面Activity负责应用程序与用户的交互,服务Service负责应用程序内部线程间的交互或两个应用程序进程之间的数据交互.看上去这两大组件就能 ...

  7. Android(java)学习笔记179:BroadcastReceiver之 有序广播和无序广播(BroadcastReceiver优先级)

    之前我们在Android(java)学习笔记178中自定义的广播是无序广播,下面我们要了解一下有序广播:   1.   我们首先了解一下有序广播和无序广播区别和联系? (1) 有序广播> 接受者 ...

  8. Android中广播接收者BroadcastReceiver详解

    1. 接收系统的广播步骤 (1)  新建一个类继承BroadcastReceiver 以监听sd卡状态的广播接收者为例 public class SdCardBroadcastReceiver ext ...

  9. 自定义广播(BroadcastReceiver)事件 --Android开发

    本例演示自定义广播事件.我们需要做的是,在主活动中写发送广播的代码,然后在接收广播的类中写接收广播的代码. 1.主活动中点击按钮后发送广播 MainActivity.java: public clas ...

随机推荐

  1. SQL批量信息保存(XML格式字符串数据)

    /* *功能:SQL批量信息录入 *此存储过程获取表单信息,插入表中.*/CREATE  PROC [dbo].[sp_SaveToMX1]@XML text   --明细表XML字符串信息ASBEG ...

  2. C# Double String互转

    /// <summary> /// str转金额 元 /// </summary> /// <param name="money"></p ...

  3. 你好,C++(36)人参再好,也不能当饭吃!6.3 类是如何面向对象的

    6.3  类是如何面向对象的 类作为C++与面向对象思想结合的产物,作为面向对象思想在C++中的载体,它的身上流淌着面向对象的血液.从类成员的构成到类之间的继承关系再到虚函数,到处都体现着面向对象封装 ...

  4. ORACLE数据库多表关联查询效率问题解决方案

    最近在做项目中遇到多表关联查询排序的效率问题(5张以上40W+数据的表),查询一次大概要20多秒,经过一番苦思冥想,处理方案如下: 1.软件设计初期,需要一对一关联的表应该设计在一张大表里,这样虽然字 ...

  5. getUrlParam,jQuery中的URL参数获取

    大家经常会需要在一段URL中截取到自己所需参数的值,下面的方法也许能帮到您: $.getUrlParam = function(name){ var reg = new RegExp("(^ ...

  6. $_GLOBALS超全局数组和global定义的全局变量区别?

    全局变量:主程序中定义的变量(函数外部),只能在主程序中使用,在函数内部不能调用 背景:解决在函数内部调用全局变量的问题 解决方法: 1.在函数内部声名全局变量 <?php public $va ...

  7. 让 zend studio 识别 Phalcon语法并且进行语法提示

    让 zend studio  识别 Phalcon语法并且进行语法提示 https://github.com/phalcon/phalcon-devtools/tree/master/ide 下载解压 ...

  8. HTTP协议学习-02

    HTTP 协议详解之 URL 的组成 http(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议,常基于 TCP 的连接方式,HTTP1.1 版本中给出一种持续连接的机制,绝大多数的 ...

  9. SQL2008数据库连接服务器为主机名时连接成功,服务器为Ip地址时链接失败

    如图:

  10. SpEL快速入门

    Spring表达式语言(简称SpEL)是一种鱼JSP2 EL功能类似的变道时语言,它可以在运行时查询和操作对象图.与JSP 2的EL相比,SpEL功能更加强大,它甚至支持方法的调用和基本字符串模板. ...