【问题标题】:savedInstanceState vs getIntent().getExtras()savedInstanceState 与 getIntent().getExtras()
【发布时间】:2016-02-20 21:01:39
【问题描述】:

我遇到了 2 种不同的类型来根据一些参数运行我的活动。第一个是 savedInstanceState,另一个是 getIntent.getExtras()

Q1) 所以我不明白的是,一旦我将 bundle 传递给我的活动然后启动它,它应该有包。 但是,如果由于某种原因再次重新创建活动,它应该再次具有相同的捆绑包。 (我说的对吗?)

Q2)基于 Q1 是真实的事实,以及一旦活动已经开始我不能只覆盖捆绑包的事实,我想如果由于某种原因在我已经开始的活动中,我想改变一些捆绑包的参数,我应该创建一些活动字段并在我的活动生活中使用这些字段。 如果由于某种原因我的活动将被重新创建,则覆盖 saveInstanseState 以保存新字段。是真的吗?

Q3) 基于以上事实,在 onCreate() 中,Android 世界中的每个活动都应该像这样开始:

if (savedInstanceState != null) {
    mType = savedInstanceState.getInt("some_val1");
    mCardId = savedInstanceState.getLong("some_val2");
    mQuery =  savedInstanceState.getString("some_val3");
    mCategory = savedInstanceState.getLong("some_val4");;
} else {
    mType = getIntent().getExtras().getInt("some_val1");
    mCardId  = getIntent().getExtras().getLong("some_val2");
    mQuery = getIntent().getExtras().getString("some_val3");
    mCategory = getIntent().getExtras().getString("some_val4");
}

Q4)假设 onSaveInstanceState 被调用并保存的值与启动活动的原始包不同(getIntent.getExtras),如果再次重新创建活动,这是否意味着 saveInstanceState 不同于 getIntent.getExtras( ) 或者他们现在是一样的? (如果它们相同,那么上面代码中的 if/else 没有真正的含义,因为它是相同的!)。

Q5) 如果我没有覆盖 onSaveInstanceState,但是当我创建活动时我将它传递给一个 Bundle,这是否仍然意味着如果再次重新创建活动,我可以获得我的原始包? (我猜这个问题会根据其他答案自行回答)

【问题讨论】:

    标签: android android-activity android-lifecycle


    【解决方案1】:

    getIntent().getExtras()savedInstanceState 的主要区别在于它们的用法不同。意图是用于活动之间的通信,而保存的状态是用于离开活动时 UI 的当前状态,例如按主页按钮。所以它会保存你的ListViews 和类似的位置或未保存的TextEdits 的值。

    Q1:是的,一般来说,只要您不再次打开活动,信息就不会丢失。

    Q2:到目前为止是正确的。默认视图会保存它们的状态,所以你不需要自己做。但是,如果您的 Activity 使用不同的捆绑包第二次启动,您将拥有新的值。

    Q3:没有必要,这取决于您的用例,但这不会破坏任何东西。关键是当您从 Internet 加载日期时,您只需等待一次,在第二次调用 onCreate() 时,数据将被恢复(如果您在带有 id 的 UI 元素中显示它们!)。

    Q4:意图是初始值,而保存状态是值的修改状态。

    Q5:一般来说应该是一样的。由于基本的 ui 元素会默认保存它们的状态。

    保存状态的重点是即使您的应用在后台被销毁,也可以保持 ui 更改。因此,即使您的设备内存中不再存在应用程序,您的应用程序也会从它离开的地方恢复。

    【讨论】:

    • 您是说重新创建 Activity 时不会丢失 Intent Extras 吗?
    • 正确。只要您没有获得“新意图”(例如,通过从不同的意图或应用程序启动相同的意图),它就不会改变。
    猜你喜欢
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多