我正在创建一个提醒应用程序,几乎所有的功能都可以正常工作,除了在屏幕关闭(手机处于睡眠状态)时闹钟响起时启动的活动没有显示。当屏幕打开时,可以看到Android的主桌面,并且闹钟响起时,活动似乎也很好。
我使用AlarmManager.setExactAndAllowWhileIdle(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的onCreate:
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
GoingOffActivity立即完成。
当屏幕打开但被某种模式锁定时,会发生这种情况:
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中设置了minSdkVersion为23。
我该怎么办?
答案 0 :(得分:1)
引用为here的双生命周期事件是“窗口标志”方法解雇键盘锁的已知限制,直到API 27才修复。这意味着Activity
可以暂停并停止,直到它出现在屏幕上。
如果您不finish()
Activity
,通常第二次onResume()
,一切都会好的。但是,如果您确实在finish()
或onPause()
中调用onStop()
,将导致Activity
进入销毁状态,并且您将永远看不到它。>
解决方案是删除在finish()
可见之前发生的所有Activity
调用。