Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用锁仅从BroadcastReceiver启动一次活动--Android_Android_Android Intent - Fatal编程技术网

使用锁仅从BroadcastReceiver启动一次活动--Android

使用锁仅从BroadcastReceiver启动一次活动--Android,android,android-intent,Android,Android Intent,情景: 如果同时设置两个报警,则只应显示其中一个 我的问题是: 我有一个广播接收器,当时间到的时候,它会将一个意图转发给AlarmGoOffActivity。但是,在转发意图之前,我需要检查AlarmGoOffActivity是否已经运行。从我在SO中看到的一个答案中。我尝试过这种方法。早些时候,两个警报都触发了。现在,两个警报都没有了 代码 MyBroadCastReceiver.java AlarmGoOffActivity.java 我以为第一个会开火。现在,两个人都没有开火。为什么这不起

情景:

如果同时设置两个报警,则只应显示其中一个

我的问题是:

我有一个广播接收器,当时间到的时候,它会将一个意图转发给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;
    }
}