如果暂停太久,为什么app不能从最近开始

时间:2016-08-11 02:16:43

标签: android

当我暂停我的应用时,我已经注意到了一个问题,比如按下主页,然后调出最近的应用列表(通过方形按钮)以恢复它。

如果我在暂停后立即恢复它,它可以正常工作。但是如果我让它暂停了很长时间,即几个小时或一夜之间,那么当我触摸它的窗口恢复它时,它只是发布了一个“未能启动...”吐司并从列表中删除该应用程序。

我已经四处寻找,但没有找到任何有关导致此问题或如何开始调试的信息。

4 个答案:

答案 0 :(得分:0)

我的理论是与活动生命周期有关。你可以在这里找到它: https://developer.android.com/training/basics/activity-lifecycle/starting.html

当应用程序暂停时,会调用onPause()函数,如果应用程序暂停,并且系统需要在前台运行的另一个应用程序的内存,它将停止或销毁活动。当你回到应用程序时,它会调用onCreate()和onStart()函数

我不知道您的应用是如何构建的,但我的猜测是,当活动停止时,它会留下某些需要引用不再存在的代码或破坏引用的代码事物本身。然后,当调用onStart()时,它会检查那些不再存在的东西并崩溃。

解决此问题的最佳方法是确保生命周期的每个步骤都不会引用在调用它时可能不存在的任何内容。

答案 1 :(得分:0)

当用户通过按Home键离开任务时,当前活动将停止,其任务将进入后台。系统保留任务中每个活动的状态。如果用户稍后通过选择开始任务的启动器图标来恢复任务,则任务将到达前台并在堆栈顶部恢复活动。

如果用户长时间离开任务,系统将清除除根活动之外的所有活动的任务。当用户再次返回任务时,仅恢复根活动。系统以这种方式运行,因为在很长一段时间之后,用户可能已经放弃了之前正在做的事情,并且正在返回任务以开始新事物。

您可能会查看有关Tasks and Back Stack的Android文档以及有关Pausing and Resuming活动的一些信息。 :)

答案 2 :(得分:0)

你的问题可能与android上的内存管理有关。它看起来像Android杀死你的应用程序释放内存,以便它可以被其他应用程序使用。我的应用程序布局非常复杂(该应用程序加载了太多图像)。有一段时间,当我从最近的应用程序列表运行应用程序时,它始终从开始运行应用程序。不是我离开应用程序的最后一个州。安瓦,没什么值得担心的。这是正常行为。

答案 3 :(得分:0)

据我所知,这是你的问题 -

  • 你正在开展一项活动。
  • 然后按主页按钮。并且活动转到后台。
  • 当您在5分钟后启动应用程序时,应用程序将从暂停的活动开始。但是当您在5小时后启动应用程序时,应用程序将从头开始。

<强>解决方案 -

  • 这种情况正在发生,因为活动正在被android系统在后台杀死。
  • 可以通过调用活动的ondestroy()方法来杀死应用程序。
  • 当应用程序转到后台时,它会被添加到android系统的应用程序堆栈中。当android需要更多内存用于任何操作时,它从应用程序堆栈中的最后一个应用程序获取内存。它杀死了最后一个应用程序并占用了它的记忆。
  • 这就是你的应用被长时间杀死的原因。你的应用程序位于堆栈的最后一个,并且android已杀死你的应用程序以获取内存。
  • 您可以找到有关流程here的更多说明。

如何解决此问题

  • 这可以通过定期将您的应用程序置于堆栈前面来解决。

  • 您可以在后台运行活动中的服务,以便保持在堆栈的顶部。

  • 或以共享偏好设置保存上次打开的活动,并在应用启动时转到此活动。