在我的Android应用程序中,当我旋转设备(滑出键盘)时,“活动”将重新启动(调用onCreate)。现在,这可能是应该的,但我在onCreate方法中做了很多初始设置,所以我需要:
将所有初始设置放在另一个功能中,这样不会在设备旋转或使其不再调用Create,布局仅调整或将应用程序限制为仅肖像,以便不调用onCreate。
在我的Android应用程序中,当我旋转设备(滑出键盘)时,“活动”将重新启动(调用onCreate)。现在,这可能是应该的,但我在onCreate方法中做了很多初始设置,所以我需要:
将所有初始设置放在另一个功能中,这样不会在设备旋转或使其不再调用Create,布局仅调整或将应用程序限制为仅肖像,以便不调用onCreate。
当前回答
您需要使用onSavedInstanceState方法来存储其参数的所有值。is是一个捆绑包
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
outPersistentState.putBoolean("key",value);
}
和使用
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
savedInstanceState.getBoolean("key");
}
检索并设置值以查看对象它将处理屏幕旋转
其他回答
在清单中添加此行:android:configChanges=“orientation | screenSize”
谷歌推出的android架构中最好的组件之一将满足ViewModel的所有要求。
它旨在以生命周期的方式存储和管理与UI相关的数据,并允许数据在屏幕旋转时继续存在
class MyViewModel : ViewModel() {
请参阅:https://developer.android.com/topic/libraries/architecture/viewmodel
onConfigurationChanged is called when the screen rotates.
(onCreate is no longer called when the screen rotates due to manifest, see:
android:configChanges)
清单的哪个部分告诉它“不要调用onCreate()”?
而且谷歌的文档说要避免使用android:configChanges(除非作为最后手段)。但是,他们建议的替代方法都使用android:configChanges。
根据我的经验,模拟器总是在旋转时调用onCreate()。但我运行相同代码的1-2台设备……没有。(不知道为什么会有什么不同。)
即使更改android的方向,onCreate方法仍会被调用。因此,将所有繁重的功能转移到这个方法并不会对您有所帮助
Android 3.2及更高版本更新:
警告:从Android 3.2(API级别13)开始,当设备在纵向和横向方向之间切换时,“屏幕大小”也会发生变化。因此,如果在为API级别13或更高级别开发时(如minSdkVersion和targetSdkVersion属性所声明的),想要防止因方向改变而导致运行时重新启动,则除了“方向”值之外,还必须包含“screenSize”值。也就是说,您必须声明android:configChanges=“orientation|screenSize”。但是,如果您的应用程序以API级别12或更低为目标,则您的活动始终自行处理此配置更改(即使在Android 3.2或更高版本的设备上运行时,此配置更改也不会重新启动您的活动)。
从…起http://web.archive.org/web/20120805085007/http://developer.android.com/guide/topics/resources/runtime-更改.html