首页 > 解决方案 > 如何确保Android中只有一个给定的活动?

问题描述

我不确定对于应定期检查某些条件并在满足条件时发出警报的应用程序的最佳实现是什么。

假设我的主要活动MainActivity有一个“开始”按钮,它启动前台服务CheckConditionService,每秒检查一次条件。如果满足条件,则应启动AlarmActivity具有“停止警报”按钮的新活动,并且还应启动周期性哔声。如果用户按下“停止报警”,AlarmActivity则应销毁并CheckConditionService停止周期性蜂鸣声并继续周期性状态检查。

现在可能有几个我要注意的不寻常的用例:

  1. 用户可以(意外或故意)关闭AlarmActivity而不是按下“停止警报”按钮,或者它可能被系统关闭,因为它在后台的时间过长。AlarmActivity在这种情况下,用户应该能够通过单击应用程序图标或前台通知重新打开CheckConditionService.
  2. 另一方面,单击其中一个永远不会创建一个AlarmActivity同时打开多个的状态。
  3. 也许我忘记了其他一些需要注意的异常行为?欢迎提出建议!

问题:如何做到这一点最好和最干净的方法?CheckConditionService如果满足条件并且应该启动警报,应该调用什么?MainActivity在1. 中可以做些什么onCreate()来确定当前是否发出警报,因此应该启动AlarmActivity和 2. 是否AlarmActivity已经打开,如果是,不打开的第二个实例AlarmActivity,而是打开现有的?

标签: androidandroid-activity

解决方案


  1. 创建一个ForegroundService
  2. Boolean如果要检查条件状态,请创建一个可能是类型的静态变量,例如: CheckConditionService.isConditionMet
    确保Update您在该服务中运行的任何任务。
  3. 根据返回的结果,使用 SplashScreen 确定应打开哪个 Activity CheckConditionService.isConditionMet
    这是一篇不错的文章:https ://medium.com/@shishirthedev/the-right-way-to-implement-a-splash-screen-in-android-acae0e52949a
  4. 为防止意外关闭AlarmActivity,您可以禁用onBackPressed()
    但用户始终可以通过Home Button或滑动离开(较新版本中的手势)。
    3在那里可以很方便。
  5. 要仅使用 的一个实例或单个状态AlarmActivity,请在 Manifest 中为该活动
    使用标志。singleTask

推荐阅读