Android 应用程序上下文被终止,但活动未被终止

Android 应用程序上下文被终止,但活动未被终止,android,application-lifecycle,Android,Application Lifecycle,我正在开发一个有一些活动的应用程序。一个活动开始下一个活动。为了共享一些值,我使用了一个名为MyApplication的自定义应用程序实现(我说的是android.app.Application)。 众所周知,如果应用程序需要更多的空间,Android系统就会杀死它。但这会导致一个问题: 我打开我的应用程序并像其他应用程序一样使用它 我关闭它(主页按钮)并使用其他应用程序 系统将杀死我的应用程序,因为它在浪费内存 当我重新打开我的应用程序时,它想打开我使用的最后一个活动,我得到一个强制关闭,因

我正在开发一个有一些活动的应用程序。一个活动开始下一个活动。为了共享一些值,我使用了一个名为MyApplication的自定义应用程序实现(我说的是android.app.Application)。
众所周知,如果应用程序需要更多的空间,Android系统就会杀死它。但这会导致一个问题:

  • 我打开我的应用程序并像其他应用程序一样使用它
  • 我关闭它(主页按钮)并使用其他应用程序
  • 系统将杀死我的应用程序,因为它在浪费内存
  • 当我重新打开我的应用程序时,它想打开我使用的最后一个活动,我得到一个强制关闭,因为MyApplication中的值为null
奇怪的是,系统破坏了我的应用程序,但它似乎保留了活动。我真的不明白为什么会这样,因为应用程序似乎没有生命周期。

我想要的:
当MyApplication(整个应用程序,而不仅仅是活动)被终止时,我希望最后的活动也被终止。因此,当我重新打开应用程序时,它将启动manifest.xml提供的主acitvity。

MyApplication中的值是持久的,如果应用程序被破坏,这些值不会丢失。(我说的是一些对象,所以我认为共享首选项不起作用)。
我不想使用服务将我的活动绑定到,但是否有类似的方法告诉系统我上次使用的活动取决于应用程序上下文?


我希望您理解我的问题所在,有人可以帮助我解决这个问题。

正确的方法是保存应用程序状态。 重写onSaveInstanceState(Bundle savedInstanceState)方法以保存状态,重写onRestoreInstanceState以检索状态


如果需要保存大量的数据集,考虑使用SQL数据库

,您应该确保应用程序在“代码”> OnPAUSEE()/代码>、<代码> OnReSuMe()/<代码>和<代码> OnStutter()/<代码>方法中关闭并重新启动所需的方式。查看可以保存应用程序状态的
savedInstanceState
(并在将其作为参数发送到onCreate时将其还原)

在应用程序的自定义实现中,添加一个标志,如:

public boolean appContextExist = false;
在您的第一个活动中,将标志设置为true

在需要上下文的活动上重写onCreate和onResume方法,添加以下内容:

MyApplication myApp = ((MyApplication) getApplicationContext());
if (!myApp.appContextExist) {
    // Code to return to start activity here
}

我喜欢这些答案似乎都没有提到您对自定义应用程序的使用,尽管您清楚地注意到它的用法:/)。您是否尝试过利用Application.ActivityLifecycleCallbacks,甚至不确定这是否是您想要实现的目标(似乎您可能需要反向操作)。rite,我认为您指的是活动堆栈历史记录?谢谢MikeIsrael,您是对的。下面的答案与我的问题无关。使用活动生命周期只是一种变通方法。我更喜欢应用程序是否能够处理其活动,并在整个应用程序被杀死时杀死它们。活动堆栈历史记录处理Backbutton行为而不是我的问题。我确信这是一个应用程序问题,而不是活动问题。@Josh Plusa您找到解决方案了吗?我现在遇到了完全相同的问题,我的
android.app.Application
包含大量“全局”数据,我发现有时返回到应用程序时,活动堆栈仍然存在(例如,我返回到依赖于该全局数据的活动)然而,
.application
扩展已经被终止。这让我感到困惑,因为我的印象是,
.application
实例将在任务的生命周期中持续。感谢Tipp,但正如我在帖子中所写的,这对我不起作用。据我所知,我无法在应用程序状态下保存自己的对象。那么我最好的猜测是使用SQL数据库来保存您的对象。我会仔细看看解决我问题的最好办法是什么。谢谢你的帮助!谢谢,但我说的是应用程序而不是活动。@Josh Plusa您说的是两者,并且您希望在onStops()之后恢复时启动主活动,对吗?是的。目前,我正在onResume()中检查我的值。如果它们为空,我将完成应用程序。通过这样做,我可以随时进入主要活动。但是有点脏。也许我必须仔细查看活动堆栈历史记录。谢谢你的回复!