• 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开发过程中,广播接收器里面不可以再次发送广播,否则该广播接收器的运行会进入一个死循环的状态。

  • 相关阅读:
    Document
    Document
    Document
    Document
    Document
    Document
    Document
    Document
    8.React 组件封装
    window.location / history / 以及相关事件
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/3995455.html
Copyright © 2020-2023  润新知