gpt4 book ai didi

android - Activity 开始但在屏幕关闭或锁定时不可见

转载 作者:行者123 更新时间:2023-12-02 02:42:41 25 4
gpt4 key购买 nike

我正在创建一个提醒应用程序,几乎一切正常,除了闹钟响起时启动的 Activity 在屏幕关闭(手机处于 sleep 状态)时不会显示。当屏幕打开时,看到 Android 的主桌面,闹钟响了, Activity 看起来非常正常。

我使用 AlarmManager.setExactAndAllowWhileIdle(RTC_WAKEUP, ...) 设置闹钟,在特定时间调用。

这就是我从 AlarmManager 接收 Intent 的方式:

@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。

我做错了什么?

最佳答案

双生命周期事件引用 here是解除键盘保护的“窗口标志”方法的一个已知限制,直到 API 27 才得到修复。这意味着 Activity 可以在它出现在屏幕。

如果您不finish() Activity,它通常会 onResume() 第二次,一切都会美好的。但是,如果您确实在 onPause()onStop() 中调用了 finish(),那将导致 Activity 进入销毁状态,你将永远看不到它。

解决方案是删除在 Activity 可见之前发生的所有 finish() 调用。

关于android - Activity 开始但在屏幕关闭或锁定时不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58205908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com