如何确保Android中给定的activity只有一个?
How to make sure that there is only one of a given activity in Android?
我不确定应用程序的最佳实现是什么,它应该定期检查某些条件并在满足条件时发出警报。
假设我的主 activity MainActivity
有一个“start”按钮,它启动前台服务 CheckConditionService
检查条件每秒一次。如果满足条件,一个新的 activity AlarmActivity
,它有一个“停止警报”-按钮,应该开始,并且应该开始周期性的蜂鸣声,也。如果用户按下“停止警报”,AlarmActivity
应该被销毁并且CheckConditionService
应该停止周期性蜂鸣并继续周期性条件检查。
现在可能有几个我想注意的不寻常的用例:
- 用户可以(无意或有意)关闭
AlarmActivity
而不是按下“停止警报”按钮,或者它可能被系统关闭,因为它在后台停留了太长时间。在这种情况下,用户应该能够通过单击 CheckConditionService
的应用程序图标或前台通知重新打开 AlarmActivity
。
- 另一方面,单击其中一个不应创建同时打开多个
AlarmActivity
的状态。
- 也许我忘记了其他一些需要注意的异常行为?欢迎提出建议!
问题:最好最干净的方法是什么?如果满足条件并且应该启动警报,CheckConditionService
应该调用什么? MainActivity
在 onCreate()
中可以做什么 1. 查明当前是否发出警报,因此应该启动 AlarmActivity
和 2. AlarmActivity
是否已经打开并且如果是,不是打开 AlarmActivity
的第二个实例,而是打开现有的实例?
- 创建
ForegroundService
- 创建一个静态变量,可能是
Boolean
类型,如果您想检查条件状态,例如:CheckConditionService.isConditionMet
.
确保 Update
在任何任务中 运行 在该服务中。
- 根据
CheckConditionService.isConditionMet
返回的结果,使用 SplashScreen 确定应打开哪个 Activity。
这是一篇不错的文章:https://medium.com/@shishirthedev/the-right-way-to-implement-a-splash-screen-in-android-acae0e52949a
- 为防止意外关闭
AlarmActivity
,您可以禁用 onBackPressed()
、
但是,用户始终可以通过 Home Button
或滑动离开(较新版本中的手势)。
点 3
在那里可以派上用场。
- 只使用
AlarmActivity
,
的一个实例或单一状态
在 activity. 清单中使用 singleTask
标志
我不确定应用程序的最佳实现是什么,它应该定期检查某些条件并在满足条件时发出警报。
假设我的主 activity MainActivity
有一个“start”按钮,它启动前台服务 CheckConditionService
检查条件每秒一次。如果满足条件,一个新的 activity AlarmActivity
,它有一个“停止警报”-按钮,应该开始,并且应该开始周期性的蜂鸣声,也。如果用户按下“停止警报”,AlarmActivity
应该被销毁并且CheckConditionService
应该停止周期性蜂鸣并继续周期性条件检查。
现在可能有几个我想注意的不寻常的用例:
- 用户可以(无意或有意)关闭
AlarmActivity
而不是按下“停止警报”按钮,或者它可能被系统关闭,因为它在后台停留了太长时间。在这种情况下,用户应该能够通过单击CheckConditionService
的应用程序图标或前台通知重新打开AlarmActivity
。 - 另一方面,单击其中一个不应创建同时打开多个
AlarmActivity
的状态。 - 也许我忘记了其他一些需要注意的异常行为?欢迎提出建议!
问题:最好最干净的方法是什么?如果满足条件并且应该启动警报,CheckConditionService
应该调用什么? MainActivity
在 onCreate()
中可以做什么 1. 查明当前是否发出警报,因此应该启动 AlarmActivity
和 2. AlarmActivity
是否已经打开并且如果是,不是打开 AlarmActivity
的第二个实例,而是打开现有的实例?
- 创建
ForegroundService
- 创建一个静态变量,可能是
Boolean
类型,如果您想检查条件状态,例如:CheckConditionService.isConditionMet
.
确保Update
在任何任务中 运行 在该服务中。 - 根据
CheckConditionService.isConditionMet
返回的结果,使用 SplashScreen 确定应打开哪个 Activity。
这是一篇不错的文章:https://medium.com/@shishirthedev/the-right-way-to-implement-a-splash-screen-in-android-acae0e52949a - 为防止意外关闭
AlarmActivity
,您可以禁用onBackPressed()
、
但是,用户始终可以通过Home Button
或滑动离开(较新版本中的手势)。
点3
在那里可以派上用场。 - 只使用
AlarmActivity
,
的一个实例或单一状态 在 activity. 清单中使用
singleTask
标志