Android 活动开始,但不是';屏幕关闭或锁定时不可见

Android 活动开始,但不是';屏幕关闭或锁定时不可见,android,android-intent,android-activity,alarm,activity-lifecycle,Android,Android Intent,Android Activity,Alarm,Activity Lifecycle,我正在创建一个提醒应用程序,几乎所有功能都可以正常工作,除了闹钟响起时启动的活动在屏幕关闭时不显示(手机处于睡眠状态)。当屏幕打开时,看到Android的主桌面,警报响起,活动看起来非常好 我使用AlarmManager.SetExactAndAllowHileIDLE(RTC_WAKEUP,…)设置一个在特定时间调用的报警 以下是我从AlarmManager接收意图的方式: @Override public void onReceive(Context context, Intent inte

我正在创建一个提醒应用程序,几乎所有功能都可以正常工作,除了闹钟响起时启动的活动在屏幕关闭时不显示(手机处于睡眠状态)。当屏幕打开时,看到Android的主桌面,警报响起,活动看起来非常好

我使用AlarmManager.SetExactAndAllowHileIDLE(RTC_WAKEUP,…)设置一个在特定时间调用的报警

以下是我从AlarmManager接收意图的方式:

@Override
public void onReceive(Context context, Intent intent) {
    int alarmId = intent.getIntExtra(Constants.REMINDER_ALARM_ID, 0);

    Intent goingOffIntent = new Intent(context, GoingOffActivity.class);
    goingOffIntent.putExtra(Constants.REMINDER_ALARM_ID, alarmId);

    context.startActivity(goingOffIntent);
}
这是GoingOffActivity的一次创建:

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_going_off);
context = this;

getWindow().setFlags(
        WindowManager.LayoutParams.FLAG_FULLSCREEN |
                WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
                WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
                WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
        WindowManager.LayoutParams.FLAG_FULLSCREEN |
                WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
                WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
                WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

loadData(getIntent());
当屏幕关闭且报警关闭时,在日志中创建以下条目:

18:35:03.593 20113-20113/me.mitulat.myProgram W/MyProgram: onCreate
18:35:03.661 20113-20113/me.mitulat.myProgram W/MyProgram: onCreate finish
18:35:03.674 20113-20113/me.mitulat.myProgram W/MyProgram: onPause
18:35:03.675 20113-20113/me.mitulat.myProgram W/MyProgram: onPause finish
18:35:03.714 20113-20113/me.mitulat.myProgram W/MyProgram: onStop
18:35:03.724 20113-20113/me.mitulat.myProgram W/MyProgram: onStop finish
活动立即结束

当屏幕打开但被模式锁定时,会发生以下情况:

18:30:00.503 20113-20113/me.mitulat.myProgram W/MyProgram: onCreate
18:30:00.585 20113-20113/me.mitulat.myProgram W/MyProgram: onCreate finish
18:30:00.598 20113-20113/me.mitulat.myProgram W/MyProgram: onPause
18:30:00.599 20113-20113/me.mitulat.myProgram W/MyProgram: onPause finish
18:30:00.635 20113-20113/me.mitulat.myProgram W/MyProgram: onStop
18:30:00.655 20113-20113/me.mitulat.myProgram W/MyProgram: onStop finish
18:30:00.764 20113-20113/me.mitulat.myProgram W/MyProgram: onStop
18:30:00.769 20113-20113/me.mitulat.myProgram W/MyProgram: onStop finish
我正在实际设备上进行测试,build.gradle中设置了Minsdk23版本


我做错了什么?

引用的双生命周期事件是解除键盘保护的“窗口标志”方法的已知限制,直到API 27才修复。这意味着
活动可以在屏幕上显示之前暂停和停止

如果你不
finish()
完成
活动
,通常会再次
onResume()
,一切都会好起来。但是如果您在
onPause()
onStop()
中调用
finish()
,这将导致
活动
进入销毁状态,您将永远看不到它


解决方案是删除在
活动
可见之前发生的任何
finish()
调用。

请参阅这需要API级别27。我为API级别23开发。发生这种情况的设备的实际API级别是多少?我只想确保您没有在
onPause()
中调用
finish()
。您可能不想这样做。参见警告。我相信“双生命周期事件”中包含了一个
onStop()
。这样,您可以预期在您的活动出现在屏幕上之前会出现一个
onStop()
,如果您在
onStop()
期间调用
finish()
,那么就到此为止了。你的活动永远不会出现。