在我onCreate()
的{{1}}中,我的应用程序执行密集操作以生成一些数据集(在单独的线程中运行,但需要2到3秒才能正常完成)。现在我的问题是,当方向改变时,应用程序再次再次执行此复杂计算。
由于我之前没有做过这样的事情,我想知道是否有办法解决这个问题。我的第一个想法是将计算数据存储在MainActivity
变量中,以便数据在static
的不同实例之间保持不变。我猜这不是最好的方法。
我的数据集包含MainActivity
和Map
,而不是简单的数据类型,如果有帮助的话。
我查看了ArrayList
,但它只提供了存储int,String等值。
答案 0 :(得分:1)
除了@Raghunandan建议您可以阅读Recreating an Activity上的官方文档。 它说:
Your activity will be destroyed and recreated each time the user rotates the screen. When the screen changes orientation, the system destroys and recreates the foreground activity because the screen configuration has changed and your activity might need to load alternative resources (such as the layout.
它还引入了概念 onSaveInstanceState()(要保存有关活动状态的其他数据,您必须覆盖此方法)和 onRestoreInstanceState()方法(此方法的默认实现执行先前已被onSaveInstanceState(Bundle)冻结的任何视图状态的恢复)。
您还可以在此处查看这些方法的示例实现Saving Android Activity state using Save Instance State thread,这将帮助您保存和恢复状态。
<强>更新强>
您也可以尝试使用:
<activity name= ".YourActivity" android:configChanges="orientation|screenSize"/>
android:configChanges
的{{3}}说;
It lists configuration changes that the activity will handle itself. When a configuration change occurs at runtime, the activity is shut down and restarted by default, but declaring a configuration with this attribute will prevent the activity from being restarted.
来源:docs
希望这会有所帮助。