首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

旋转屏幕时,onSaveInstanceState()不起作用

旋转屏幕时,onSaveInstanceState() 方法不起作用的原因是屏幕旋转会导致 Activity 重新创建,而 onSaveInstanceState() 方法是在 Activity 被销毁之前调用,用于保存 Activity 的状态信息,以便在重新创建后恢复状态。

在屏幕旋转时,系统会销毁当前的 Activity 并重新创建一个新的 Activity 实例。此时,onSaveInstanceState() 方法会被调用,用于保存需要恢复的数据。然后,系统会调用新创建的 Activity 的 onCreate() 方法来重建界面,并通过 Bundle 参数传递之前保存的状态数据。

然而,onSaveInstanceState() 方法并不能保证数据的完全恢复,它仅适用于保存一些基本的数据类型和序列化对象,而对于一些复杂的对象或数据,可能需要通过其他方式进行处理。

解决这个问题的方法之一是在 AndroidManifest.xml 文件中配置 Activity 的属性 android:configChanges="orientation"。通过设置该属性,可以告诉系统在屏幕旋转时不重新创建 Activity,而是只调用 onConfigurationChanged() 方法,然后我们可以在该方法中自行处理屏幕旋转带来的变化。

需要注意的是,该方法适用于简单的界面变化,但对于一些复杂的界面操作或需要重新加载资源的情况,仍然需要使用 onSaveInstanceState() 方法进行状态保存和恢复。

总结起来,当屏幕旋转时,onSaveInstanceState() 方法不起作用的原因是 Activity 会被销毁和重新创建,可以通过设置 android:configChanges="orientation" 属性来阻止重新创建,或者使用其他方式进行状态保存和恢复。

推荐的腾讯云相关产品:无

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案

    ,当用户旋转屏幕会重新启动。...运行结果: 当正常加载数据完成之后,用户不断进行旋转屏幕,log会不断打出:onSaveInstanceState->onDestroy->onCreate->onRestoreInstanceState...注:这里也没有考虑加载旋转屏幕,问题与上面的一致。...从效果图可以看到,无论如何旋转不会重启Activity. 效果图: 6、旋转屏幕的最佳实践 下面要开始今天的难点了,就是处理文章开始所说的,当异步任务在执行时,进行旋转,如果解决上面的问题。...传入新的Activity,我们会在再次打开一个加载框,当然了因为屏幕旋转并不影响加载的数据,所有后台的数据一直继续在加载。

    2.1K20

    iOS屏幕旋转及其基本适配方法

    目录 一、最让人纠结的三种枚举 二、两种屏幕旋转的触发方式 三、屏幕旋转控制的优先级 四、开启屏幕旋转的全局权限 五、开启屏幕旋转的局部权限(视图控制器) 六、实现需求:项目主要界面竖屏,部分界面横屏...二、两种屏幕旋转的触发方式 我们开发的App的,大多情况都是大多界面支持竖屏,几个特别的界面支持旋转横屏,两种界面相互切换,触发其旋转有两种情况: 情况1:系统没有关闭自动旋转屏幕功能, 这种情况,支持旋转的界面跟随用户手持设备旋转方向自动旋转...三、屏幕旋转控制的优先级 事实上,如果我们只用上面的方法来控制旋转的开启与关闭,并不能符合我们的需求,而且方法无效。这是因为我们忽略了旋转权限优先级的问题。...五、开启屏幕旋转的局部权限(视图控制器) 在设置了全局所支持的旋转方向后,接着就开始设置具体的控制器界面了。我们在上面已经说明了关于旋转的优先级了。...方法2:在需要默认横屏的界面里设置,进入时强制横屏,离开强制竖屏 关于这种使用,这个具体可以参考第五节中的demo2 注:两种方法不可同时使用 八、关于旋转后的适配问题 屏幕旋转的实现会带来相应的UI

    9.3K60

    让android程序根据重力感应旋转屏幕(支持4个方向旋转)

    ,自己监视重力感应来控制屏幕旋转。...所以在界面不可见的时候要把监视器注销掉,这个可以在activity的onPause方法里操作,同样的,要保证界面可见的时候要及时的注册监视器,这个放在activity的onResume方法里操作;二是默认activity在旋转屏幕的时候会把原来的...activity退出,重新打开一个新的activity,为了避免用户数据丢失我们可能希望直接把屏幕旋转过来但是不关闭已有的activit,这就需要在activity的配置属性里加上这么一项:android...:configChanges="orientation|keyboard" 这样就能保证activity在旋转的时候不会关闭了。...TYPE_ACCELEROMETER 的感应器有三个轴,当手机水平放置,屏幕朝上的时候是该感应器的初始状态,这个时候,y轴和x轴的值都是0,而z轴的值是-9.8m/s.当手机转动三个轴的值都会相应的变化

    2.1K10

    自学HarmonyOS应用开发(64)- 处理屏幕旋转

    旋转屏幕是手机用户的一个日常操作,本文介绍如何在屏幕旋转自动调整屏幕布局的方法。...效果如下: 间接处理屏幕旋转 默认情况下用户旋转屏幕,Harmony应用架构会调用AbilitySlice类的onStart方法,所以原则上讲,只要开发者在onStart中获取屏幕方向并选择适当的画面布局就间接处理了屏幕旋转...直接处理屏幕旋转 另外一个和getDisplayOrientiaon同样具有迷惑性的是Ability和AbilitySlice都有一个屏幕旋转事件处理方法,看起来开发者只要重写这个方法就能接受相应的通知...void onOrientationChanged(AbilityInfo.DisplayOrientation displayOrientation) 但是事实是:只是重写这个方法,屏幕旋转它根本不会被调用...解决这个问题的方法是修改config.json文件并增加红框中的内容: 另外一个事实是:一旦你为Ability的configChanges指定了orientation值,屏幕旋转Harmony架构就不会再调用

    1.2K40

    1.2、Activity的状态保存

    @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState...注意:并不是每一次Activity销毁,系统都回去回调onSaveInstanceState()方法,我们是我们自己finish掉该Activity,那么onSaveInstanceState()方法就不会被调用...Activity状态保存的默认机制 然而,即使我们不重写onSaveInstanceState()方法,Activity对于onSaveInstanceState()方法的默认实现,仍然会帮我们恢复某些状态...stub super.onRestoreInstanceState(state); } 几乎Android框架中的每一个widget都适当的实现了这个方法,这样任何可见的UI更改活动在重新创建自动保存和恢复...就是旋转设置,让屏幕方向变化(当然前提是你没有锁定设置的旋转功能,Activity也没有设置屏幕方向)。当屏幕方向变化时,系统为了新的屏幕配置寻找替代资源,会销毁和重建Activity。

    85230

    ViewModel

    二.VIewModel的生命周期特性   由于Android平台的特殊性,若应用程序支持横竖屏切换,那么当用户旋转手机屏幕的时候,我们还需要考虑数据的存储和恢复。...ViewModel独立于配置变化,这意味着,屏幕旋转所导致的Activity重建,并不会影响ViewModel的生命周期,如下图所示: 三.ViewModel的基本使用方法   前面提到,ViewModel...}); } }); timerViewModel.startTiming(); } }   运行程序并旋转屏幕...可以看到,当屏幕发生旋转的时候,计时器仍然在继续,这意味着横竖屏下的Activity对应的ViewModel是同一个,它所持有的数据一直存在着。...五.ViewModel和onSaveInstanceState()方法   对于页面数据的保存和恢复,也许你有这样的疑问,onSaveInstanceState()方法同样可以解决屏幕旋转带来的数据丢失问题

    21530

    ViewModel:持久化、onSaveInstanceState()、UI 状态恢复和 Loader

    ViewModel 允许数据在例如屏幕旋转这样的配置更改后依然保留。...ViewModel 允许数据在例如屏幕旋转这样的配置更改后依然保留。 现在,你可能会有几个问题是关于 ViewModel 到底能做什么。本文我将解答: ViewModel 是否对数据进行了持久化?...重要的是你的 activity 维持着用户期望的状态,即便是屏幕旋转,系统关机或者用户重启。如我刚才所说,不要用复杂对象阻塞 onSaveInstanceState 方法同样也很重要。...此外,Loader 可以在配置更改期间保留,比如说在加载的过程中你旋转了手机屏幕。这听起来很耳熟吧!...在这个场景下,ViewModel 在 activity 旋转或者进入后台仍保留数据,而单纯用 onSaveInstanceState() 并没那么容易实现。

    98320

    Android基础部分再学习---activity的状态保存

    outState) {   super.onSaveInstanceState(outState);       Log.d("roamer", "onSaveInstanceState");  ...super.onRestoreInstanceState(state);   }   几乎Android框架中的每一个widget都适当的实现了这个方法,这样任何可见的UI更改活动在重新创建自动保存和恢复...就是旋转设置,让屏幕方向变化(当然前提是你没有锁定设置的旋转功能,Activity也没有设置屏幕方向)。当屏幕方向变化时,系统为了新的屏幕配置寻找替代资源,会销毁和重建Activity。...  换句话说:你自己finish,他肯定不会调用的,必须是系统自己触发的, 比如  1, 由于重力感应 手机从竖屏变为横屏,  2, 手机点击Home键和长按Home键 3, 点击电源键锁屏...4, 从当前Activity跳到另一个Activity 5, 应用内存不足即将自动销毁 2.onSaveInstanceState他保存的数据是持有化的,还是永久性的呢 onSaveInstanceState

    99820

    ViewModel:持久化、onSaveInstanceState()、UI 状态恢复和 Loader

    ViewModel 允许数据在例如屏幕旋转这样的配置更改后依然保留。 现在,你可能会有几个问题是关于 ViewModel 到底能做什么。本文我将解答: ViewModel 是否对数据进行了持久化?...重要的是你的 activity 维持着用户期望的状态,即便是屏幕旋转,系统关机或者用户重启。如我刚才所说,不要用复杂对象阻塞 onSaveInstanceState 方法同样也很重要。...此外,Loader 可以在配置更改期间保留,比如说在加载的过程中你旋转了手机屏幕。这听起来很耳熟吧!...ViewModel 不是 onSaveInstanceState() 的替代品,因为他们在与配置更改相关的销毁保存数据,而不能在系统杀死应用进程保存。...在这个场景下,ViewModel 在 activity 旋转或者进入后台仍保留数据,而单纯用 onSaveInstanceState() 并没那么容易实现。

    3.8K30

    Activity详解(二)——异常情况下的生命周期分析

    如图:当竖屏切换到横屏,测试log如下: ? 当由横屏切换到竖屏的时候,测试log如下: ?...当系统重建的时候会调用onRestoreInstanceState这个方法,并且把Activity销毁onSaveInstanceState方法所保存的Bundle对象作为参数同时传递给onRestoreInstanceState...当Activity在异常情况下需要重新创建,系统会默认为我们保存当前的Activity的视图结构,并且在Activity重启后为我们恢复这些数据。...关于保存和恢复View层次结构,系统的工作流程是这样的:首先Activity被意外终止,Activity会调用onSaveInstanceState去保存数据,然后Activity会委托Window去保存数据...比如我们上文提到的旋转屏幕所造成的Activity异常销毁,这个过程和正常停止Activity是不一样的,因为旋转屏幕后,Activity被销毁的同时会立刻创建Activity实例,这个时候Activity

    1.8K40

    Android-Jetpack笔记-ViewModel

    ViewModel处于数据逻辑层,他的生命周期贯穿整个宿主,如act因屏幕旋转销毁重建,其依然存活,只有act.finish后,才会自动销毁,因此可以用他来维持宿主的数据状态。...//更新UI mBinding.tvText.setText(s); } }); //旋转屏幕重建...= null) { // Restore the ViewModelStore from NonConfigurationInstances //act屏幕旋转重建...优缺点 优点: 页面退出,自动销毁 屏幕旋转、语言切换后数据不丢失,而onSaveInstanceState在面对复杂数据需要序列化 不持有view层,方便单元测试 缺点: 虽然要比onSaveInstanceState...简单,但是viewModel只能在屏幕旋转和语言切换后的页面重建维持数据,当页面意外销毁时数据无法恢复,而这点onSaveInstanceState可以做到,关于viewModel如何实现这一点,可以看我的下一篇笔记

    75920
    领券