2015-09-17 95 views
0

我有android应用程序与几个服务。 此应用程序应该在此应用程序启动并停止时向远程服务器发送报告。 但我不知道如何确定应用程序已停止,因为可能会停止应用程序(例如压缩),但服务仍在运行。 我认为算法应该是这样的:如何确定何时Android应用程序已启动,何时停止

  1. 检查与存储最后日期标记(如果这个标志存在 - 发送“停止”时间服务器)
  2. 发送“开始”消息在服务器上,当应用程序启动
  3. 每10分钟应用程序应该写入当前日期和时间标记磁盘

如果我将创建服务,该检查 - 当有低内存的Android可以杀死这种单一的服务,但应用程序可以运行。如果我将在Application类中创建ScheduledExecutorService - 应用程序可以停止,但服务仍可以运行。

你能帮我解决吗?

回答

0

这个问题确实没有一个答案。在这里曾经有很多很多次的问题,但我们可以说的确实取决于我们应用的行为。

你想放一些Log消息在onPause()onStop()onDestroy()Activity,并onDestroy()Service。通过查看Logcat中打印的日志,仔细观察应用程序的流程。

很多人试图依靠onDestroy()方法,因为它看起来像是在应用程序完全终止时调用的,但情况并非总是如此。有时应用程序崩溃(强行关闭),或者有些人只是手动强制关闭设置中的应用程序信息。在这种情况下,应用不会遵循活动的生命周期。

其中一个建议是创建一个在后台运行的线程并将UDP数据包发送到服务器,表示该应用程序每隔几秒钟都处于活动状态。

PRO:您不需要与服务器进行握手,因此可以节省从服务器获取响应的时间/资源。

CON:线程运行背景确实使用电池。 UDP只能在最近的Android操作系统的WiFi环境中使用。

希望你找到一个好方法。当你找到一个好的解决方案时,你可能想对你的文章发表评论,因为人们也想知道如何解决它。

0

为什么不尝试信任标准方法Activity? enter image description here

您应该接近onDestroy和/或onPause。这取决于你的逻辑。

另外,您可以尝试覆盖Application.onTerminate()。你可以阅读它(应用程序)lifecycle here

+0

等待。假设应用程序有10个活动,并且当我打开第二个活动时 - 第一个活动可以被销毁,但整个应用程序仍在运行 – user788660

+0

首先,保留(Application.onTerminate())。其次,您可以控制“实时”活动的数量。 – user2413972

相关问题