场景:
当同时设置两个闹钟时,只应显示其中的闹钟。
我的问题:
我有一个广播接收器,它会在适当的时候将意图转发给AlarmGoOffActivity。但是,在转发意图之前,我需要检查AlarmGoOffActivity是否已运行。从我在SO中看到的答案之一。我尝试了这种方法。早些时候,两个警报都响起了。现在,两个警报都不会响起。
法典
MyBroadCastReceiver.java
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);
}
警报关闭活动.java
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;
}
}
我期待第一个开火。现在,两个人都不开火。为什么这不起作用?是因为静态变量(我错过了一些概念?)还是因为广播之间10毫秒或更短的时间间隔。感谢您的帮助。
接收方应处理意图,然后快速退出。它不应该试图确定Activity
是可见的还是活动的或其他什么。
相反,您应该让Activity
处理重新通知。特别是,您可能会发现onNewIntent
处理从接收方发送的新意图很有用。在活动中,您可以设置标志来确定如何处理重新通知与Activity
当前所处的状态。