代码之家  ›  专栏  ›  技术社区  ›  jul

简单Android应用程序的生命周期

  •  2
  • jul  · 技术社区  · 15 年前

    我有一个简单的应用程序,有三个活动:

    • 第一个包含一个搜索框,该搜索框调用Web服务并在列表视图中显示下面的结果(餐馆)
    • 当一家餐厅被点击时,另一项活动开始显示该餐厅的描述和“显示地图”按钮。
    • 单击“显示地图”按钮时,猜猜看,地图显示在第三个活动中。

    所有数据都由Web服务(餐馆描述和坐标)加载到第一个活动中,并且每个活动所需的数据通过 intent.putExtra .

    现在,当单击 back button (例如,点击地图上的后退按钮继续 restaurant description 所有数据设置正确的活动),而我还没有做任何关于生命周期的事情。

    为什么?是否自动保存所有变量?我应该用吗? onSaveInstanceState() onRestoreInstanceState() 反正?

    谢谢

    七月

    2 回复  |  直到 10 年前
        1
  •  0
  •   EvilTeach    10 年前

    当新的活动B在另一个活动A上启动时,活动A默认不会被破坏,它将变为 停止 在那之后,你只需重新开始。如果系统需要资源,它可以破坏停止的活动。有一个很好的图表 here 这确实解释了组件的生命周期。

        2
  •  0
  •   Arvis    12 年前

    当活动停止时,活动对象将保留在内存中,并在活动恢复时被调用。您不需要重新初始化在导致恢复状态的任何回调方法期间创建的组件。系统还跟踪布局中每个视图的当前状态,因此,如果用户将文本输入到EditText小部件中,则保留该内容,这样您就不需要保存和恢复它。

    即使系统在停止时破坏了您的活动,它仍然会在一个包(一个键值对的blob)中保留视图对象的状态(例如edittext中的文本),并在用户导航回活动的同一个实例时还原它们。

    http://developer.android.com/training/basics/activity-lifecycle/stopping.html

    默认情况下,系统使用bundle实例状态保存活动布局中每个视图对象的信息(例如输入到editText对象中的文本值)。因此,如果您的活动实例被销毁并重新创建,那么布局的状态将恢复到以前的状态,而您不需要任何代码。但是,您的活动可能有更多想要恢复的状态信息,例如跟踪用户在活动中的进度的成员变量。

    注意:为了让Android系统恢复活动中视图的状态,每个视图必须有一个由android:id属性提供的唯一ID。

    若要保存有关活动状态的其他数据,必须重写OnSaveInstanceState()回调方法。

    http://developer.android.com/training/basics/activity-lifecycle/recreating.html