使用锁仅从BroadcastReceiver启动一次活动--Android
情景: 如果同时设置两个报警,则只应显示其中一个 我的问题是: 我有一个广播接收器,当时间到的时候,它会将一个意图转发给AlarmGoOffActivity。但是,在转发意图之前,我需要检查AlarmGoOffActivity是否已经运行。从我在SO中看到的一个答案中。我尝试过这种方法。早些时候,两个警报都触发了。现在,两个警报都没有了 代码 MyBroadCastReceiver.java AlarmGoOffActivity.java使用锁仅从BroadcastReceiver启动一次活动--Android,android,android-intent,Android,Android Intent,情景: 如果同时设置两个报警,则只应显示其中一个 我的问题是: 我有一个广播接收器,当时间到的时候,它会将一个意图转发给AlarmGoOffActivity。但是,在转发意图之前,我需要检查AlarmGoOffActivity是否已经运行。从我在SO中看到的一个答案中。我尝试过这种方法。早些时候,两个警报都触发了。现在,两个警报都没有了 代码 MyBroadCastReceiver.java AlarmGoOffActivity.java 我以为第一个会开火。现在,两个人都没有开火。为什么这不起
我以为第一个会开火。现在,两个人都没有开火。为什么这不起作用?是不是因为静态变量,我错过了一些概念?或者是因为广播之间的时间间隔为10毫秒或更少。感谢您的帮助。接收者应处理好意图,然后快速退出。它不应试图确定活动是否可见或处于活动状态或其他状态 相反,您应该让活动处理重新通知。特别是,您可能会发现onNewIntent对于处理从接收器发送的新意图非常有用。在“活动”中,您可以设置标志,以确定如何处理与“活动”当前状态相对应的重新通知
if (AlarmGoOffActivity.running) {
BLog("AlarmActivity running");
} else {
BLog("AlarmActivity not running ");
//set this variable true so that new broadcasts are not entertained
AlarmGoOffActivity.running = true;
Intent intent1 = new Intent(context, AlarmGoOffActivity.class);
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent1.putExtra(DBHelper.COLUMN_ID, id);
String ext = extras.getString(DBHelper.TASK_TITLE);
if (ext != null) {
intent1.putExtra(DBHelper.TASK_TITLE, ext);
}
BLog("Starting alarm fire");
context.startActivity(intent1);
}
public class AlarmGoOffActivity extends ActionBarActivity {
public static boolean running = false;
.....
@Override
public void onDestroy() {
super.onDestroy();
//changing the lock to false here. So a new one can start from
//broadcastreceiver
running = false;
}
}