我有广播接收器,当用户收到短信时它会启动。只有当我的活动处于前台或设备处于睡眠模式时,广播接收器中的代码才会触发。但是我在检测我的活动是否在前台有一个小问题。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 天感到沮丧。
谢谢你的帮助。