码迷,mamicode.com
首页 > 移动开发 > 详细

android在广播接收器BroadcastReceiver里面再进行发送广播,造成当前广播接收器不断循环执行问题

时间:2014-09-26 22:32:18      阅读:277      评论:0      收藏:0      [点我收藏+]

标签:android   io   使用   ar   数据   sp   art   问题   cti   

最近在公司处理项目时,用到锁屏状态弹出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   io   使用   ar   数据   sp   art   问题   cti   

原文地址:http://www.cnblogs.com/Free-Thinker/p/3995455.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!