Java Android:创建新活动的新实例

Java Android:创建新活动的新实例,java,android,android-intent,Java,Android,Android Intent,我对一些基本的android开发概念感到困惑,我的问题不是针对某个特定的代码,这就是为什么我不包括任何代码 假设我有一个活动,其中有一个容器,我在其中加载了两个片段(它们是同一片段的多个实例),现在该活动已填充,在一个片段中,我按下一个按钮打开一个新活动,该活动中可能发生的情况无关紧要,问题是,当我按下一个按钮时,它会将我带回previos活动,我知道按下后退按钮或使用.finish()将带我返回已填充的活动,但我想知道,这是否是正确的操作,还是应该在我离开后立即完成该活动,以及何时返回创建新实

我对一些基本的android开发概念感到困惑,我的问题不是针对某个特定的代码,这就是为什么我不包括任何代码

  • 假设我有一个活动,其中有一个容器,我在其中加载了两个片段(它们是同一片段的多个实例),现在该活动已填充,在一个片段中,我按下一个按钮打开一个新活动,该活动中可能发生的情况无关紧要,问题是,当我按下一个按钮时,它会将我带回previos活动,我知道按下后退按钮或使用
    .finish()
    将带我返回已填充的活动,但我想知道,这是否是正确的操作,还是应该在我离开后立即完成该活动,以及何时返回创建新实例并重新填充它,如果是,我应该将变量存储在何处

  • 假设我提到的片段是报警应用程序的“报警”,当我创建它时,我调用
    AlarmFragment newAlarm=newAlarmFragment()
    然后我将该报警添加到我的报警活动(java类)中的arrayList
    getListOfAlarms().add(getAlarmsAmount(),frag)保留在具有片段容器的活动上,问题是,这些变量是在正确的位置创建的吗?因为我把它们留在活动本身,对吗?如果活动被破坏,会发生什么?我被告知应该创建一个SQL数据库来存储这些变量。我说的不是长期保存,而是我将在运行时使用的变量


  • 有人能给我解释一下这些概念吗?链接到一个解释它的地方也很好。

    你的问题似乎有很多部分

    在第1部分中,我认为您所说的是:

    1) 您决定如何允许用户返回到第一个活动实际上取决于您。2)您在后台堆栈中保留的内容也取决于您以及您希望为应用程序中的用户功能定义的内容。例如,如果您希望他们只能使用您在Activity2容器中定义的按钮,则可以。但是,您不需要在活动2中提供按钮,您当然可以使用应用程序栏中的Up操作进行导航。如果我是你,我会读更多关于任务和后台堆栈的内容

    您还提到了必须使用.finish()来“完成一项活动”的想法。我不认为这通常是必要的,但如果你想根据你对应用程序逻辑的决定(以及用户应该和不应该做什么)来使用它,你可以使用它

    使用后退按钮,当您从活动2返回时,活动1将显示为刚刚初始化。试试看。还可以根据我提供的简单图表和生命周期“回调”运行一些日志语句(将这些方法放在您的活动中,并在每个活动中抛出日志语句,以便更好地了解您在生命周期中的位置)

    至于你问题的第2部分,我会先尝试/设置上面的一些,然后开始用单个变量进行实验,看看在活动之间会发生什么。你的问题有很多“如果”的问题。您不必创建DB来存储变量,但这肯定是一种选择。请参阅《开发人员指南》,了解大多数数据存储选项:

    如果你担心在活动被破坏时丢失数据,我可能会考虑创建一个数据库。请阅读以下内容,了解有关在您离开其他位置并返回时重新创建活动的更多信息:尤其是保存活动状态:


    这上面还有一个SO帖子:

    Bro,你可以在XML中添加“android:launchMode=“singleTop”作为你以前的活动。这样你的问题就可以解决。试试这一次。
    或者如果你想导航回来,我应该在离开后立即完成活动吗,那就别说了。谢谢你花时间详细阐述了这么好的答案。我相信我现在有了一个更好的概念,还有一件事你可以帮我,我在第二个活动中提到的按钮实际上删除了创建它的片段(以及arrayList中的项),但是我在第二个活动中找不到标记或id的片段,它返回null,我是否应该在退出第一个活动(onPause)时清理片段,然后在返回(onResume)时用正确数量的片段重新填充它?@RodrigoMiranda当你说第二个活动中的按钮删除了创建它的片段时,你能说得更具体一点吗,即你是指你第一次活动中的一个片段吗?这是你想要的吗?如果它是您第一个活动中的一个片段,您是否担心它,因为您希望在完成第二个活动时它出现在那里?关于最后一个问题,关于清理碎片和重新填充:如果您正确处理堆栈,您可能不需要手动重新填充。OnCreate()应该可以处理设置。@Isepitetus是的,该按钮是一个“删除报警”按钮。它应该删除启动第二个活动的片段,并从arraylist中删除该项,问题是,我无法从第二个活动调用fragmentManager听起来您已经在活动1中完成了以下操作,但是如果您还没有在活动2中完成此操作,您可能需要通过调用getFragmentManager()来获取fragmentManager的引用。然后,您可以创建一个“事务”,允许您添加、删除等片段。然后,“提交事务”。有关此操作的详细信息,请参阅以下链接:。特别是看下一节中的第二段代码: