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

保存数据以应对设备旋转

作者: 爱做梦的严重精神病患者 | 来源:发表于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()
    

    相关文章

      网友评论

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

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