我应该在onCreate还是onRestoreInstanceState中恢复savedinstancestate?

18
我有一个活动,可以启动其他活动并返回结果,因此当结果返回时,该活动可能已被销毁并重新创建,也可能没有。
我重写了 onSaveInstanceState 方法,以添加需要保留和恢复的数据。当活动被销毁并重新创建时,onCreate 方法会接收到 savedInstanceState bundle;但同时 onRestoreInstanceState() 方法也会被调用并传递相同的 bundle。
那么我应该在哪里放置从 bundle 中提取数据并恢复状态的代码?是在 onCreate 还是在 onRestoreInstanceState 中?后者是否保证始终被调用?
是否可能在不调用 onCreate 的情况下调用 onRestoreInstanceState 方法?(例如,如果活动被停止并重新启动但没有被销毁和重新创建)?

更好的方法是将您的代码保留在onRestoreInstanceState()中,或者您可以在onCreate()中检查Bundle args是否为null,如果不为null,则可以执行代码。当第一次调用onCreate()时,Bundle args将为null。 - Vishesh Chandra
2个回答

13

与其在onCreate()期间恢复状态,您可以选择实现onRestoreInstanceState()方法,在该方法之后系统会调用onStart()方法。只有在需要恢复保存的状态时,系统才会调用onRestoreInstanceState()方法,因此您不需要检查Bundle是否为NULL。

下面的链接非常清楚地解释了如何重新启动活动。

Android指南


谢谢。在这种情况下,在onCreate期间,savedInstanceState有什么用途? - Elye
系统重新创建Activity并将bundle传递给ocreate方法和onRestoreInstanceState方法,您可以使用这两种方法来恢复状态。现在我更喜欢使用onCreate方法,因为我总是从onCreate开始审查自己和其他人的代码。 - mcd
1
@Elye,你可能想知道在onCreate()中是否有先前的状态需要加载。此外,如果Activity没有被销毁,onCreate()将不会被调用。为了实现一个计时器,并在Activity不在屏幕上时暂停它,我需要使用onRestoreInstanceState()来相应地调整计时器。 - Fletcher Johns
这根本没有回答问题。问题是要使用哪一个。 - Artem Novikov
1
你可以使用 onRestoreInstanceState。 - mcd

0

onRestoreInstanceState( ) 方法是在 Android 的 onStart( ) 和 onResume( ) 生命周期方法之间被调用的。因此,为了恢复您的活动状态,只需实现 onRestoreInstanceState( ) 方法即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接