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

时间:2014-12-16 07:53:18

标签: android android-intent

情景

当同时设置两个警报时,只应显示它们。

我的问题:

我有一个广播接收器,它将时间转发给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);
            }

AlarmGoOffActivity.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毫秒或更短。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

接收方应处理意图然后快速退出。它不应该试图确定Activity是可见还是活动或其他什么。

相反,您应该有Activity句柄重新通知。特别是,您可能会发现onNewIntent对于处理从接收器发送的新意图非常有用。在您的活动中,您可以设置标记以确定如何处理重新通知与Activity当前所处的状态。