尽可能防止活动被破坏

时间:2014-03-04 09:46:49

标签: android android-activity fragment android-lifecycle

我有一个应用,一个包含片段的活动应用。

这个应用程序的通常用例是,你启动它并把电话拿走,不时,你回到手机并插入一些数据...这是一个日志应用程序,你正在做的事情和将结果插入应用...

我遇到了问题,我的活动一下子被摧毁,并用一个空包重新创建......(大多数时候情况并非如此,但不时发生这种情况......) 。我的应用程序有时会启动服务,即使这种服务在这种情况下被杀死......

这意味着系统已杀死我的应用程序,是吗?我该如何避免这种情况?

我需要保留用户数据和当前的顶级片段......并且它们会被保存到捆绑包中,只要状态和数据得到保存,一切都会正常工作......

不过,我的活动始终是TOP ACTIVITY,只是屏幕经常关闭......我只想让我的活动尽可能长时间活着,直到用户用后退按钮离开...或者可靠地保存状态

重要提示

onSaveInstance并不总是有效(它不是生命周期的一部分,因此无法保证被调用)......它只能在大多数情况下工作......我需要一种方法来始终工作......如果android杀了我的应用程序......

2 个答案:

答案 0 :(得分:8)

不要将您的应用程序保留在内存中

您不希望阻止Android杀死您的应用。你想要的是正确恢复你的应用程序的状态。然后,用户将永远不会注意到应用程序已被销毁,并且用户仍然可以获得在不使用时销毁的应用程序的好处。

如果你真的想要这个使用唤醒锁。这将耗尽您的用户电池,所以在实施此操作之前我要三思而后......在How do I prevent an Android device from going to sleep programmatically?

的信息

onSaveInstanceState解释

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

有关Google文档的更多信息,请访问Save your Activity stateRestore your Activity State

关于Android Activity生命周期

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

Android: onSaveInstanceState not being called from activity

的更多信息

答案 1 :(得分:2)

我遇到了类似的问题,我在搜索解决方案时到达了这个帖子,你必须使用清单来实现这一点,并且还要了解Android生态系统中究竟是什么活动,

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

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

  1. 持久性
  2. 非执着
  3. 如果您在清单中提及活动

    android:persistent="true"
    

    并运行以下用例

    1. 启动APP
    2. 按返回或主页按钮
    3. 您再次选择后堆栈中的活动以将其置于前面
    4. 活动进入开始 - >暂停 - >停止 - >恢复,它没有进入onDestroy方法。

      如果不提及

      android:persistent="true"
      

      用于相同的用例

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

      活动进入resume-> create-> start

      如果要在活动开始时运行服务/任务,当应用程序处于后台堆栈时,该服务/任务将继续运行,那么您必须在onCreate方法中启动它,并通过在清单中将活动指定为持久性来终止它们。

      我希望我的上述解决方案可以帮助其他人来到这里解决同样的问题

相关问题