我有广播接收器,当用户收到短信时会触发。广播接收器中的代码只有在我的活动处于前台或设备处于睡眠模式时才会触发。但我在检测我的活动是否在前台时遇到了一个小问题。 onResume我把布尔值“isActive”设置为true而onStop我将布尔值“isActive”设置为false。 (以这种方式检测活动是否在前景中似乎很合乎逻辑)。
在下面的代码中,我检查屏幕是否关闭或活动是否在前台,如果其中一个表达式为真,则执行以下代码。
@Override
public void onReceive(Context context, Intent intent) {
if(!pm.isScreenOn() || HandleActivity.isHandleActivityActive) {
// unnecessary code omitted
//start activity
intent = new Intent(MainService.this, HandleActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //Clear top is necessary otherwise would be a lot of new activites (depends on received sms)
startActivity(intent);
}
}
但我不知道活动生命周期发生了什么。当我第一次收到短信它完美的工作。布尔“isActive”具有以下值:
03-04 07:31:49.989: I/APP(7604): is handle activity active: true
03-04 07:31:50.169: I/APP(7604): is handle activity active: false
03-04 07:31:50.979: I/APP(7604): is handle activity active: true
当我第二次收到短信时(活动仍在前台。没有读短信或任何内容)我得到了这些值:
03-04 07:32:04.828: I/APP(7604): is handle activity active: true
03-04 07:32:06.849: I/APP(7604): is handle activity active: false
因为“isActive”现在为false,所以“if”代码无法执行。 有人可以指出我正确的方向,可能是错的或如何检查我的活动是否在前景或其他什么。由于这个原因,我在过去两天都感到沮丧。
感谢您的帮助。
答案 0 :(得分:1)
将HandleActivity设为SingleTop,并在每次收到消息时启动活动, 它会工作正常 看到这个链接 http://developer.android.com/guide/topics/manifest/activity-element.html
答案 1 :(得分:0)
我从你的代码中收集:
if(!pm.isScreenOn() || HandleActivity.isHandleActivityActive) {
isHandleActivityActive是一个静态变量吗? 在这种情况下,您可能正在检查先前的活动是否正在运行而不是您正在进行的实际活动。 尝试将该变量更改为私有实例变量,看看它是否有效。