【问题标题】:Detect application backgrounding with intelligence智能检测应用程序后台
【发布时间】:2011-06-05 20:58:19
【问题描述】:

我正在寻找一种方法来检测我的 android 应用程序是否已在后台运行,因此无论哪个 Activity 在按下 Home 键(或堆栈中最后一个活动的返回键)时运行,然后是指定的函数将被调用。

onPause()onStop() 无法区分替换当前活动的新活动和正在后台运行的应用程序,因此我正在寻求有关我必须包括哪些额外测试来确定这一点的建议。

【问题讨论】:

  • 所以基本上,您想检测用户何时离开您的主屏幕活动?
  • 你能简单描述一下你为什么想要这个吗?
  • 我在应用程序启动/前台后建立了蓝牙连接,并在任何活动运行时保持。如果应用程序是后台的,我需要断开连接。
  • 好吧,这不是安卓的做事方式。你应该考虑改变你的设计。首先,将您的蓝牙连接处理移至服务。然后从您的活动绑定到服务。
  • 这并不能解决我的问题。当我的应用程序处于后台时,我仍然需要停止服务。

标签: android background android-lifecycle onpause android-homebutton


【解决方案1】:

按照其他人的建议,使用服务是正确的做法。

概括地说,构成您的应用程序的不同活动都应该在其onResume() 方法中绑定到服务。他们应该解除与onPause() 的服务的绑定。

您的服务的onUnbind() 方法将在所有先前连接的客户端都断开连接时调用,这将是您断开蓝牙连接的点。

有关服务以及从活动绑定到服务的更多信息,请访问http://developer.android.com/reference/android/app/Service.html

【讨论】:

  • 来自developer.android.com/guide/components/bound-services.html您通常不应在活动的 onResume() 和 onPause() 期间绑定和取消绑定,因为这些回调发生在每个生命周期转换时,您应该保持在这些转换中发生的处理降至最低。此外,如果您的应用程序中的多个活动绑定到同一个服务并且其中两个活动之间存在转换,则该服务可能会被销毁并重新创建,因为当前活动在下一个绑定(在恢复期间)之前取消绑定(在暂停期间)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 2011-12-10
相关资源
最近更新 更多