何时检测应用程序关闭?

时间:2015-08-10 13:15:59

标签: android

我有一个应用程序可以自动将位置数据传输到后台的服务器(是的,这是必要的)但需要在活动被销毁时执行此操作以节省内存(即onDestroy()不起作用)但是我希望我的应用程序在正在运行的应用程序视图中“刷掉”时终止这些操作。

是否有必要这样做或线程会自动中断?

编辑:我自己了解了服务,但是我将奖励那些使用它们的最全面的例子。 (我自己并不需要,但我认为目前的答案不值得赏金。)

4 个答案:

答案 0 :(得分:6)

  

是的,这是必要的)但是需要在活动被销毁时进行以节省内存

我觉得你做错了什么。为什么将位置发送到远程对等点以及活动生命周期?我认为没有任何意义。如果您只想在前台时发送位置,可以使用ActivityLifecycleCallbacks,这样当您进入前台或后台时会收到通知,并在您进入后台时停止单独发送工作人员或者当你的活动成为最前面的活动时恢复。

关于最近与列表相关的问题,让我粘贴Dianne Hackborn的评论:

  

当您轻扫最近的任务时会发生什么:(1)   杀死应用程序的任何背景或空进程(请参阅   http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html#Lifecycle   这意味着什么),(2)使用新的   http://developer.android.com/reference/android/app/Service.html#onTaskRemoved(android.content.Intent)   API告诉应用程序的任何服务有关任务   删除所以它可以做任何它认为合适的事情。

你可以在这里找到这篇文章:https://plus.google.com/105051985738280261832/posts/GfwRYCC42uX(我没能找到直接链接到谷歌加上评论的方式)。

答案 1 :(得分:1)

创建一个扩展Service类的类。您需要在manifest(互联网上的大量工作示例)中注册课程。然后,您必须确定ServiceActivity之间的通信应如何运作。您可以使用以下方法之一:

  1. 使用MessengerExample
  2. 使用Intent并注册BroadcastReceiverExample
  3. 使用AIDL(由于其高复杂性,最好不要尝试这个)
  4. 我认为你必须自己查看这些例子。 Philipp Heckel创建了一些扩展原始Service类并实现Service to Activity通信的类。 ServiceManager.java & AbstractService.java可用于创建您需要的此类服务。此外,实现非常简单。 (Full Example

答案 2 :(得分:0)

创建您自己的ActivityBaseActivity并延伸到Activity,覆盖onDestroy()方法,并使用该方法制作您的代码。

然后,您的其他活动会扩展您的基础Activity,并覆盖onDestroy()方法,并致电súper.onDestroy()以应用父操作。

如果我是你,我会这样做。 当然,可能是其他更好的方式,但是solución-(解决方案)。

答案 3 :(得分:0)

为什么不使用intentService传输位置数据?如果应用程序被杀,它将继续工作(=传输)。

如果您只想在应用程序关闭时发送数据,那么您可以在onStop()方法中启动intentService(如另一个答案所示,扩展Activity以避免一个接一个地覆盖所有onStop)。