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



场景

当同时设置两个闹钟时,只应显示其中的闹钟。

我的问题:

我有一个广播接收器,它会在适当的时候将意图转发给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当前所处的状态。

最新更新