Android 尽可能长时间地防止活动被破坏

Android 尽可能长时间地防止活动被破坏,android,android-activity,fragment,android-lifecycle,Android,Android Activity,Fragment,Android Lifecycle,我有一个应用程序,一个包含片段的单一活动应用程序 这个应用通常的使用情况是,你启动它,把手机放好,然后不时地回到手机,插入一些数据。。。这是一个日志应用程序,你正在做一些事情并将结果插入应用程序 我有一个问题,我的活动不时被破坏,并用一个空包重新创建。。。(大多数情况下情况并非如此,但这种情况时不时发生……)。我的应用程序有时会启动一项服务,即使在这种情况下该服务也会被终止 这意味着,系统已经杀死了我的应用程序,是吗?我怎样才能避免这种情况 我需要保留用户数据和当前的顶级片段。。。它们被保存到b

我有一个应用程序,一个包含片段的单一活动应用程序

这个应用通常的使用情况是,你启动它,把手机放好,然后不时地回到手机,插入一些数据。。。这是一个日志应用程序,你正在做一些事情并将结果插入应用程序

我有一个问题,我的活动不时被破坏,并用一个空包重新创建。。。(大多数情况下情况并非如此,但这种情况时不时发生……)。我的应用程序有时会启动一项服务,即使在这种情况下该服务也会被终止

这意味着,系统已经杀死了我的应用程序,是吗?我怎样才能避免这种情况

我需要保留用户数据和当前的顶级片段。。。它们被保存到bundle中,只要它们的状态和数据被保存,一切都可以工作

顺便说一句,我的活动始终是最重要的活动,只是屏幕经常关闭。。。我只想让我的活动保持尽可能长的时间,直到用户用后退按钮离开它。。。或者可靠地拯救国家

重要提示

onSaveInstance并不总是工作(它不是生命周期的一部分,因此不保证被调用)。。。它只在大部分时间有效。。。我需要一种永远有效的方法。。。如果android杀死了我的应用程序…

请不要将你的应用程序保留在内存中 你不想阻止Android杀死你的应用。您需要的是正确恢复应用程序的状态。然后用户将永远不会注意到应用程序已被销毁,并且用户仍然可以从未使用时被销毁的应用程序中获益

如果你真的想这样做,请使用wakelock。这将耗尽你的用户电池,所以在实施这项技术之前我会三思而后行。。。信息在

onSaveInstanceState解释 为此,请检查捆绑包中需要哪些信息,并使用
onSaveInstanceState(bundle:bundle)
方法保留这些信息,以便您可以在
onCreate(sameBundle:bundle)
中重用这些信息

更多信息可从和的Google文档中获得

关于Android活动生命周期 正如@prom85在下面的注释中所述,不能保证调用
onSaveInstanceState
方法,因为它不是生命周期的一部分。解决方法是使用
onPause
lifecycle钩子来确保存储数据


更多信息参见

我遇到了类似的问题,我是在搜索解决方案时找到这篇文章的,你必须使用清单来实现这一点,同时也要了解在Android生态系统中,活动到底是什么

在Android中,活动是一项具有预定义工作的任务

我在文档中翻了很多,我发现,我们可以通过两种方式配置活动

  • 持久的
  • 非持久性
  • 如果您在清单中提到的活动为

    android:persistent="true"
    
    然后运行下面的用例

  • 启动应用程序
  • 按后退或主页按钮
  • 再次选择后堆栈中的活动以将其置于前
  • 活动进入开始->暂停->停止->恢复,不进入onDestroy方法

    如果不提

    android:persistent="true"
    
    对于相同的用例

    活动进入开始->暂停->停止->销毁,如果您从后堆栈中选择活动

    活动进入恢复->创建->开始

    如果您想在activity start上运行服务/任务,而该服务/任务在应用程序处于后堆栈时仍在运行,那么您必须在onCreate方法中启动该服务/任务,并通过在manifest中将您的活动指定为persistent来在存储中终止它们


    我希望我的上述解决方案可以帮助那些因为同样问题来到这里的人

    你不能阻止android杀死你的应用程序,你可能也会被杀死。。。我不确定如何保存活动状态,但您应该能够保存活动状态并在重新创建时将其还原。您应该注意活动的当前状态,拥有一些活动状态,然后可以将其序列化或保存在共享首选项中。。。检查活动的开始你们可以防止屏幕锁定,你们可以创建一个应用程序类,把你们的静态变量放进去,这样就可以保持很长时间。我在我的帖子中写道,这只是偶尔发生的。。。所以有时候,onSaveInstance不起作用,我的活动将用一个空包重新创建。。。当然,大多数情况下,这是有效的。。。我已经这样做了。。。我知道,android会杀死我的应用程序,因为它认为它不再需要了(例如,屏幕是的),但在我的情况下,这是错误的。。。我考虑使用前台服务并将其绑定到我的活动以解决我的问题。。。但我更喜欢一个解决方案,它允许我的应用程序被删除,但被正确恢复,总是。。。不仅在大多数情况下……那么您可能应该尝试调试它。您可以选中“form development options to always destroy activities”选项,以强制存储捆绑包,然后使用应用程序的一些不同用例进行测试。开发人员选项>不保留活动(在底部)实际上,我保留了。。。如果调用了
    onSaveInstanceState
    ,则此操作有效。。。但是,他们不能保证它被调用(因为它不是生命周期的一部分)。。。那是我的问题。。。我只是想,其他人可能已经以某种方式解决了这个问题……好吧,根据这个答案,你确实有道理。解决方案是将其保存在onPause方法中,因为这是生命周期的一部分。这是一项扎实的工作。我读过(我知道这个解决方案)。。。我还是不确定,信息是否完整。。。事实上,我仍然不知道是否可以确定,每当系统破坏我的活动时,总是调用onSaveInstance。。。我的生命测试表明,我不能。。。但我不确定,如果他们可能是我的应用程序中的一个错误,或者如果我真的不能确定这个函数是否被调用。。。你知道吗?正如您的链接中所写,似乎只有在以下情况下才跳过该函数: