0

我有广播接收器,当用户收到短信时它会启动。只有当我的活动处于前台或设备处于睡眠模式时,广播接收器中的代码才会触发。但是我在检测我的活动是否在前台有一个小问题。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”现在为假,“if”代码无法执行。有人能指出我正确的方向吗,可能出了什么问题或如何检查我的活动是否在前台或其他地方。因此,我在过去 2 天感到沮丧。

谢谢你的帮助。

4

2 回答 2

1

将您的 HandleActivity 设为 SingleTop 并让活动在每次消息到达时启动,它会正常工作,请参阅此链接 http://developer.android.com/guide/topics/manifest/activity-element.html

于 2013-03-18T15:28:48.763 回答
0

我从你的代码中收集:

if(!pm.isScreenOn() || HandleActivity.isHandleActivityActive) { 

isHandleActivityActive 是一个静态变量吗?在这种情况下,您可能正在检查以前的活动是否正在/正在运行,而不是您所在的实际活动。尝试将该变量更改为私有实例变量,看看它是否有效。

于 2013-03-18T15:35:37.257 回答