android - 如何确保Android中只有一个给定的活动?
问题描述
我不确定对于应定期检查某些条件并在满足条件时发出警报的应用程序的最佳实现是什么。
假设我的主要活动MainActivity
有一个“开始”按钮,它启动前台服务CheckConditionService
,每秒检查一次条件。如果满足条件,则应启动AlarmActivity
具有“停止警报”按钮的新活动,并且还应启动周期性哔声。如果用户按下“停止报警”,AlarmActivity
则应销毁并CheckConditionService
停止周期性蜂鸣声并继续周期性状态检查。
现在可能有几个我要注意的不寻常的用例:
- 用户可以(意外或故意)关闭
AlarmActivity
而不是按下“停止警报”按钮,或者它可能被系统关闭,因为它在后台的时间过长。AlarmActivity
在这种情况下,用户应该能够通过单击应用程序图标或前台通知重新打开CheckConditionService
. - 另一方面,单击其中一个永远不会创建一个
AlarmActivity
同时打开多个的状态。 - 也许我忘记了其他一些需要注意的异常行为?欢迎提出建议!
问题:如何做到这一点最好和最干净的方法?CheckConditionService
如果满足条件并且应该启动警报,应该调用什么?MainActivity
在1. 中可以做些什么onCreate()
来确定当前是否发出警报,因此应该启动AlarmActivity
和 2. 是否AlarmActivity
已经打开,如果是,不打开的第二个实例AlarmActivity
,而是打开现有的?
解决方案
- 创建一个
ForegroundService
Boolean
如果要检查条件状态,请创建一个可能是类型的静态变量,例如:CheckConditionService.isConditionMet
。
确保Update
您在该服务中运行的任何任务。- 根据返回的结果,使用 SplashScreen 确定应打开哪个 Activity
CheckConditionService.isConditionMet
。
这是一篇不错的文章:https ://medium.com/@shishirthedev/the-right-way-to-implement-a-splash-screen-in-android-acae0e52949a - 为防止意外关闭
AlarmActivity
,您可以禁用onBackPressed()
,
但用户始终可以通过Home Button
或滑动离开(较新版本中的手势)。
点3
在那里可以很方便。 - 要仅使用 的一个实例或单个状态
AlarmActivity
,请在 Manifest 中为该活动
使用标志。singleTask
推荐阅读
- python - 如何清除 IDLE shell 中所有文本的屏幕?
- azure - 如何使用 ADF 表达式生成器提取两个字符之间的字符串?
- assembly - 在用户输入中查找第一个和最后一个大写字母
- vulkan - 什么是 DirectX 12 相当于 Vulkan 的“瞬态附件”?
- character-encoding - Shift_JIS 中的反斜杠和波浪号字符是否有正确的编码?
- android - 以编程方式设置工具栏高度在 android 4.4 上不起作用
- java - javafx.scene.robot.Robot 与 java.awt.Robot
- excel - Excel Function Large with condition
- c - 此代码(在描述中)如何工作?
- c# - I want to protect the users' API public and secret keys in my UWP app