美文网首页
保存数据以应对设备旋转

保存数据以应对设备旋转

作者: 爱做梦的严重精神病患者 | 来源:发表于2018-11-28 20:43 被阅读0次

1.创建水平布局

 当设备旋转时会改变设备配置设备配置是一系列的特征组合,用来描述当前设备的状态。这些特征有:屏幕方向屏幕像素密度屏幕尺寸、键盘类型、底座模式以及语言等。

 通常为了匹配不同的设备配置,应用会提供不同的备选资源。当应用在运行时发生配置变更,Android会销毁当前Activity,为新配置寻找最佳资源,然后创建新实例并且使用这些资源

 例:可创建水平模式布局,当设备旋转至水平方向,Android就会自动使用此布局

创建资源目录.JPG
创建水平布局2.JPG
创建水平布局3.JPG

 需要注意的是,两个布局文件(水平和竖直方向)的文件名必须相同,这样它们才能以同一个资源ID被引用


2.保存数据

 利用onSaveInstanceState(Bundle outState),该方法通常在onStop()方法之前由系统调用。需要注意的一点:当用户手动点击后退键,系统不会调用onSaveInstanceState()方法,会彻底销毁当前的Activity。

 当Activity被销毁的时候(非典型的生命周期),系统会调用onSaveInstanceState(Bundle outState)自动将Activity视图数据保存,并将保存数据的Bundle传给onCreate()和onRestoreInstanceState()方法。当Activity重建的时候,系统会调用onRestoreInstanceState()方法恢复Activity的视图数据(通常在onStart()方法之后)。
 在覆盖onCreate(Bundle)方法时,实际上是调用Activity超类的onCreate(Bundle)方法并传入收到的bundle。在超类代码实现里取出保存的视图状态数据,进行一些初始化操作,使onRestoreInstanceState()方法更好地执行

 也可以通过覆盖onSaveInstanceState(Bundle)方法将一些数据保存在Bundle中,然后在onCreate(Bundle)方法中取回这些数据
Bundle是键--值对结构,存储字符串键与特定的类型值之间的映射关系。这个特定的类型可以是基本数据类型,也可以是实现了SeraializableParcelable接口的对象

 然而,在Bundle中保存定制类对象不是一个好主意因为取回的对象可能已经没有用了比较好的做法是,通过其他方式保存对象,而在Bundle中保存标识对象基本类型数据

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (savedInstanceState != null) {
            mIndex = savedInstanceState.get(KEY_INDEX);
        }
    }

@Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(KEY_INDEX, mIndex);
    }

 在onSaveInstanceState()保存小的暂存状态的数据,可以在onStop()方法中进行稍微有些量级的操作保存永久性数据(SharedPreferenced)。onPause()方法中不适合进行相对有量级的操作(最好不要有操作)。


3.设备旋转时的生命周期

onCreate(Bundle)-->onStart()-->onResume()-->onPause()-->onSaveInstanceState(Bundle)
-->onStop()-->onDestroy()

-->onCreate(Bundle)-->onStart()-->onRestoreInstanceState(Bundle)-->onResume()

相关文章

  • 保存数据以应对设备旋转

    1.创建水平布局  当设备旋转时会改变设备配置。设备配置是一系列的特征组合,用来描述当前设备的状态。这些特征有:屏...

  • 2019-10-18 【Math】unity及c#内置函数

    四元数计算: 1.旋转后四元数 * 旋转前四元数 = 最终朝向四元数(四元数旋转量的叠加,是用旋转后的乘旋转前的)...

  • iOS旋转横屏(解决禁用旋转时全频横屏方法)

    禁用设备自动旋转时的横屏方法 监听设备旋转 原理:给要横屏的视图添加父视图,旋转这个父视图 不禁用设备自动旋转横屏...

  • 检测设备旋转

  • 旋转屏幕设备

    著作权归作者所有。 作者:臧其龙 链接:http://www.zhihu.com/question/3137653...

  • 【Unity编程】四元数(Quaternion)与欧拉角

    欧拉旋转、四元数、矩阵旋转之间的差异 除了欧拉旋转以外,还有两种表示旋转的方式:矩阵旋转和四元数旋转。接下来我们比...

  • iOS 系统通知

    UIDevice UIDeviceOrientationDidChangeNotification:设备旋转UID...

  • keychain和userdefaults

    userdefault适合保存一些轻量级的数据,使用userdefault保存的数据加载的时候要快一些,数据以明文...

  • 持久化技术概览

    保存在内存中的数据时处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术则是提供了一种机制可以让数...

  • UE4 三种旋转(二)

    UE4 三种旋转(二) UE4 中旋转操作常用的方式:欧拉角、四元数和旋转矩阵。 欧拉角 四元数 利用四元数进行旋...

网友评论

      本文标题:保存数据以应对设备旋转

      本文链接:https://www.haomeiwen.com/subject/krnzqqtx.html