【问题标题】:Android finding out when activity destroyedAndroid找出活动何时被破坏
【发布时间】:2015-01-27 18:33:53
【问题描述】:

目前要了解我的应用程序何时退出,我正在使用onDestroy() 来执行关闭和套接字并关闭蓝牙的代码。现在唯一的问题是onDestroy() 并不总是被调用,因此无法向远程设备发送应用程序正在退出且蓝牙没有关闭的信号。有谁知道我可以找出应用程序是否 100% 退出的方法?

【问题讨论】:

    标签: java android bluetooth exit


    【解决方案1】:

    Android 授予您onPause() 的呼叫。不授予onStop()onDestroy()。将您的代码放入onPause()onResume()

    【讨论】:

    • @dcharms OP 要求活动(来自标题)所以我不明白你的评论
    • OP 想知道应用何时关闭,而不是活动。 onPause 将在用户转到另一个活动时被调用,而不仅仅是在应用程序本身关闭时。
    【解决方案2】:

    这取决于您对“我的应用程序何时退出”的定义。阅读此页面了解更多信息:http://developer.android.com/training/basics/activity-lifecycle/starting.html

    我建议将代码放在onPause()

    【讨论】:

    • 但是无论何时调用 onPause 都会禁用蓝牙,并且启用、发送登录数据、恢复然后再次禁用是一项昂贵的操作。当我的意思是退出时,我的意思是当应用程序从内存中删除时。就像你从后台应用页面滑开时一样
    • 但它不会耗尽电池以保持蓝牙开启吗?
    【解决方案3】:

    一种流行的方法是跟踪您的活动 onPause() 和 onResume() 回调,并使用“appActivityStarted”之类的 globalFlag。 然后实现以下算法:

    • 在 onPause() 中设置 appActivityStarted = false 并启动一个 Timer 线程,该线程将在 5 秒后超时
    • 在 onResume() 中设置 appActivityStarted = true 并取消计时器
    • 如果发生超时(未取消)-> 如果 (appActivityStarted == false) 那么您应该在应用停止时执行您需要执行的任何操作
    • 不要忘记在读取/设置标志时进行适当的同步

    我已经对这种方法进行了广泛的测试,没有发现任何问题。

    【讨论】:

      猜你喜欢
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多