Android 为什么可以';如果暂停时间过长,应用程序将从最近启动

Android 为什么可以';如果暂停时间过长,应用程序将从最近启动,android,Android,我注意到一个问题,当我暂停我的应用程序时,比如按home,然后调出最近的应用程序列表(通过方形按钮)继续 如果我在暂停后很快恢复它,它工作正常。但如果我让它暂停太长时间,例如几个小时或一夜,那么当我触摸它的窗口继续它时,它只会发布一个“启动失败…”吐司并从列表中删除该应用 我已经到处搜索了,但没有找到任何关于导致此问题的原因或如何开始调试它的信息。我的理论是,这与活动生命周期有关。你可以在这里找到它: 当某个应用程序暂停时,将调用onPause()函数,如果该应用程序暂停,并且系统需要另一个在

我注意到一个问题,当我暂停我的应用程序时,比如按home,然后调出最近的应用程序列表(通过方形按钮)继续

如果我在暂停后很快恢复它,它工作正常。但如果我让它暂停太长时间,例如几个小时或一夜,那么当我触摸它的窗口继续它时,它只会发布一个“启动失败…”吐司并从列表中删除该应用


我已经到处搜索了,但没有找到任何关于导致此问题的原因或如何开始调试它的信息。

我的理论是,这与活动生命周期有关。你可以在这里找到它:

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

我不知道你的应用程序是如何构造的,但我猜当活动停止时,它会留下某种代码,需要引用不再存在的东西,或者破坏被引用的东西本身。然后,当调用onStart()时,它会检查不再存在的东西并崩溃


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

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

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


您可以查阅Android文档中有关某项活动的一些信息。:)

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

就我而言,这是你的问题-

  • 您正在开始一项活动
  • 然后你按下主页按钮。活动进入后台
  • 5分钟后启动应用程序时,应用程序将从暂停的活动启动。但当你在5小时后启动应用程序时,应用程序会从头开始
解决方案-

  • 发生这种情况是因为android系统正在后台杀死该活动
  • 可以通过调用活动的ondestroy()方法终止应用程序
  • 当应用程序进入后台时,它会被添加到android系统的应用程序堆栈中。当android需要更多内存进行任何操作时,它会从应用程序堆栈中的最后一个应用程序中获取内存。它杀死最后一个应用程序并占用其内存
  • 这就是你的应用程序在很长一段时间后被杀死的原因。你的应用程序位于堆栈的最后一个,android为了获取内存而杀死了你的应用程序
  • 你可以找到更多关于这个过程的解释
如何解决这个问题

  • 这可以通过定期将应用程序放在堆栈的前面来解决

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

  • 或者将上次打开的活动保存在共享首选项中,并在应用程序启动时转到此活动


如果从主屏幕重新启动应用程序,看起来会发生清除。我只是在尝试从“最近使用的应用”列表而不是主屏幕启动应用时才发现这个问题。这不是在错误状态下启动的问题。问题是这个应用程序根本无法启动。最近的列表并没有真正显示图标,而是显示了一个预览窗口。点击显示一个祝酒词。祝酒词说什么?如果它从初始状态重新启动就可以了;我看到的问题是,它有时不是从最近的列表开始的。我会看一看,到目前为止,我还没有看到任何证据表明它是一个崩溃,尽管它很难复制,所以当我手头有一个开发环境来查找堆栈跟踪时,我没有复制它。