最近在公司处理项目时,用到锁屏状态弹出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开发过程中,广播接收器里面不可以再次发送广播,否则该广播接收器的运行会进入一个死循环的状态。