【问题标题】:Difference between recreating an Activity with recreate() method and startActivity(getIntent())使用 recreate() 方法和 startActivity(getIntent()) 重新创建 Activity 的区别
【发布时间】:2014-01-23 17:22:30
【问题描述】:

我或多或少是 android 编程的初学者

我的问题来自this post

据我所知,重启我所在的同一个Activity主要有两种方法:

a)Activity.recreate() [在 API 11 之后添加]

b)

Intent intent = getIntent();
    finish();
    startActivity(intent);

这两个实际上是如何工作的?他们重新创建活动的过程有什么不同吗?

我相信这两者重新创建活动的方式之间一定存在一些差异,因为我已经看到recreate() 在我的活动中的视图中添加了一些默认(垃圾?)值。 此外,recreate() 使用默认的黑色启动视图启动新活动

【问题讨论】:

  • 嗯,b) 与 API 级别 11 之前的设备兼容... ;)
  • 是的,就在上面:P
  • 这是一个相关的区别,如果您(像我一样)想要支持至少 Froyo(API 级别 8)设备。

标签: android android-activity


【解决方案1】:

重新创建 - (您可以恢复活动状态) 这导致与由于配置更改而创建 Activity 时的流程基本相同——当前实例将经历其生命周期到 onDestroy() ,然后在它之后创建一个新实例。 这也意味着 ViewModel 没有被销毁。

recreate() 方法的作用类似于配置更改,因此如果适用,还会调用您的 onSaveInstanceState() 和 onRestoreInstanceState() 方法。

非常有趣的阅读: http://developer.android.com/training/basics/activity-lifecycle/recreating.html

完成 ActivityResult 被传播回通过 onActivityResult() 启动你的人。 并作为堆栈顶部的新活动重新开始

【讨论】:

  • 这是错误的。 onSaveInstanceState调用。只有在系统终止活动时才会调用它。
  • @MartinKonecny - 文档非常具体,调用 recreate() 与配置更改具有相同的效果:“当前实例将经历其生命周期到 onDestroy() 和一个新实例然后在它之后创建。”。发生这种情况时,将调用onSaveInstanceState() ,就像配置更改时一样(除非您通过清单标志更改了默认行为)。
  • 谢谢,vm not destroy 声明很有帮助
猜你喜欢
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多