【问题标题】:detect if an app is closed from recent apps list or killed by OS检测应用程序是否从最近的应用程序列表中关闭或被操作系统杀死
【发布时间】:2020-02-04 03:57:28
【问题描述】:

如果应用关闭,我需要执行一些 API 调用

onDestroy()onStop() 如果应用程序从最近的应用程序列表中关闭或被 android 系统杀死,则不会被触发。但是可能有解决方法吗?

我试过this & this

当我尝试时(在 Xiaomi note 7 Android 9 上)它失败了,也没有调用它 来自 cmets 的所有人都同意在 Android O 中不再调用 onTaskRemoved()

那么任何人都可以帮助我找到一种方法来实现该解决方法,尤其是在小米、oppo 等上?

【问题讨论】:

    标签: android android-activity android-lifecycle


    【解决方案1】:

    我认为问题不在于当您从最近的列表中删除应用程序时没有调用 onTaskRemoved。我会说,也许您启动的服务在应用程序进入最近的应用程序列表之前就被杀死了。

    我想share an answer here at SO,它试图描述前台服务被杀死的问题。

    因此,如果您将服务作为suggested here 的前台服务运行,您需要定期执行一些操作以保持服务处于活动状态。如果该服务之前没有被杀死,我假设您应该能够调用onTaskRemoved

    根据您的用例提出的建议:

    正如此答案的评论中所述,您希望在用户离开应用程序时从购物车中删除商品,以使其可供其他用户订购。

    这对我来说更像是一个设计问题,可以通过多种方式完成。我可以放弃一些建议,但是,我的建议可能不适合您的情况。

    1. 从服务器端解决它:
      1. 当用户在购物车中添加商品时,将商品添加到购物车时的时间戳值存储在服务器端数据库中。
      2. 采用默认阈值作为购物车项目的到期时间。当来自另一台设备的新用户尝试访问同一项目时,请检查时间戳值,如果时间超过阈值时间,则将该项目标记为可用。
    2. 从服务器端 2 解决它:
      1. 恕我直言,物品在结帐/付款之前始终可用。在您的实现中,如果我可以获取您的 API 端点,我可以进行简单的脚本攻击,这样我就可以将商品保存在购物车中而无需购买。因此,您当前的实现中存在一个可以轻松利用的严重漏洞。我宁愿将商品保留在购物车中,直到有人付款为止。
      2. 如果您在有人付款之前一直可以订购该商品,您可以在付款前检查可用性并告诉客户该商品已经售出。
    3. 从应用端解决这个问题:
      1. 我会说,我找不到确保调用用于取消购物车的 API 以从购物车中删除商品的好方法。我之前提出的解决方案仍然可能有效,但是,恕我直言,这是矫枉过正。
      2. 如果您采用onTaskRemoved 实施,您可能会考虑在其中设置一个计时器,以便您还可以在一段时间后为要从购物车中删除的商品设置一个阈值。否则,您最终将永远使其他用户无法使用该项目(如上所述)。

    【讨论】:

    • 在移动到周期性任务之前,onTaskRemoved 从未执行过,虽然服务已经启动我的手机是小米note 7。还有,我这里必须有周期性逻辑吗?如果应用程序已经关闭不需要它运行很长时间你明白我的意思吗?
    • 我不确定您的意图,但是,我试图说明,您需要将该服务作为前台服务启动,以便用户可以看到该服务作为通知或其他方式运行,即使该应用程序在后台。此外,前台服务必须执行一些周期性任务以保持自身的生命力。
    • 让我为你解释一下,我的后端工作如下.. 保留添加到购物车的服务,如果用户取消预订我清除它,但是,如果他关闭应用程序怎么办?我需要的是清除购物车物品,以防应用程序关闭。如果您知道从购物车中删除商品的更好方法,请为其他用户发布服务。
    • 我已经更新了我的答案。请看一看。谢谢!
    • @IgorGanapolsky 实际上我不确定。但是,恕我直言,我也不建议这样做。我们可以使用JobScheduler或android的前台服务来定期检查应用程序是否停止。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多