时,当用户旋转屏幕会重新启动。...中启动一个异步任务去加载数据,这里使用Thread.sleep模拟了一个耗时操作;当用户旋转屏幕发生重新启动时,会onSaveInstanceState中进行数据的存储,在onCreate中对数据进行恢复...从效果图可以看到,无论如何旋转不会重启Activity. 效果图: 6、旋转屏幕的最佳实践 下面要开始今天的难点了,就是处理文章开始时所说的,当异步任务在执行时,进行旋转,如果解决上面的问题。...传入新的Activity时,我们会在再次打开一个加载框,当然了因为屏幕的旋转并不影响加载的数据,所有后台的数据一直继续在加载。...,其实不仅是屏幕旋转需要保存数据,当用户在使用你的app时,忽然接到一个来电,长时间没有回到你的app界面也会造成Activity的销毁与重建,所以一个行为良好的App,是有必要拥有恢复数据的能力的~~
Activity不重建 在Android中,如果希望WebView页面在设备旋转时不销毁并重新加载,可以通过以下步骤实现: 在AndroidManifest.xml文件中,对应的Activity中添加如下配置...: android:configChanges="orientation|screenSize" 这将告诉系统在设备旋转或屏幕尺寸改变时不重新创建Activity。...例如,如果希望Activity在设备旋转和屏幕尺寸变化时都不被销毁和重新创建,可以这样配置: android:configChanges="orientation|screenSize" 这样,当设备的方向或屏幕尺寸发生变化时...,Activity不会被销毁和重新创建,而是会调用onConfigurationChanged()方法进行相应的处理。...在该方法中,你可以选择不执行任何操作,或者手动调整布局等。
Activity 的生命周期由一系列回调方法组成,这些方法在 Activity 的不同状态时被系统调用。...**调用时机**: Activity 第一次创建时调用。2. onStart()**作用**: 在 onCreate() 之后调用,表示 Activity 即将变为可见状态。...这些数据可以在 onCreate() 或 onRestoreInstanceState() 中恢复。**调用时机**: Activity 可能被系统销毁时调用(例如屏幕旋转或内存不足时)。...**调用时机**: Activity 重新创建时调用(例如屏幕旋转后)。...**配置更改**: 当设备配置发生改变(如屏幕旋转)时,默认情况下 Activity 会被销毁并重新创建,此时 onDestroy() 会被调用。
这使得数据可以在屏幕旋转等配置变化的情况下不丢失。 这篇文章是详细探索ViewModel系列文章中的第一篇。...ViewModel从你首次请求创建ViewModel(通常在onCreate的Activity)时就存在,直到Activity完成并销毁。...Activity 的生命周期中,onCreate可能会被调用多次,比如当应用程序被旋转时,但 ViewModel 会一直存在,不会被重建。...之所以不这样做是因为,ViewModel 比 UI控制器生命周期长,比如你旋转一个Activity三次,会得到三个不同的Activity实例,但ViewModel只有一个。...这使得数据可以在屏幕旋转等配置变化的情况下得以保存。 ViewModels将UI实现与 App 数据分离开来。
https://blog.csdn.net/gdutxiaoxu/article/details/62235974 讲解之前需要说明的是 旋转屏幕:在系统的自动旋转屏幕开启的情况下,我们旋转屏幕...手动设置屏幕:我们自己去调用Activity的 setRequestedOrientation 方法。...screenLayout 屏幕布局发生变化——这个会导致显示不同的Activity。屏幕方向发生变化——用户旋转了屏幕。...如果我们打开系统的自动旋转屏幕,旋转屏幕,系统不会发生变化,也不会调用 Activity 的 onConfigurationChanged 方法。..., 可能有人会有这样的疑问,当我们设置了Activity的方向为竖屏或者横屏的时候,旋转屏幕并不会重新调用Activity的各个生命周期,那我们要怎样检测呢?
相关方法介绍 (1) onCreate(Bundle savedInstanceState) 方法 Activity 创建时回调 : 该方法会自动传入一个 Bundle 对象, 该 Bundle 对象就是上次被系统销毁时在...; onSaveInstanceState方法调用注意事项 : -- 用户主动销毁不会调用 : 当用户点击回退键 或者 调用了 finish() 方法, 不会调用该方法; -- 调用时机不固定 : 该方法一定是在...Activity 被系统销毁之后 恢复 Activity 时被调用, 只有销毁了之后重建的时候才调用, 如果内存充足, 系统没有销毁这个 Activity, 就不需要调用; -- Bundle 对象传递...: 该方法保存的 Bundle 对象在 Activity 恢复的时候也会通过参数传递到 onCreate() 方法中; -- 位于生命周期位置吧 : 该方法在 onResume() 方法之前保存信息;...System.out.println("onSaveInstanceState() : save date www.octopus.org.cn"); } } 运行结果 : 在运行的过程中 旋转屏幕
ViewModel处于数据逻辑层,他的生命周期贯穿整个宿主,如act因屏幕旋转销毁重建时,其依然存活,只有act.finish后,才会自动销毁,因此可以用他来维持宿主的数据状态。...方法打印ViewModel的hashCode,可见屏幕旋转导致act重建时,mCommonViewModel还是同一个实例, ?...= null) { // Restore the ViewModelStore from NonConfigurationInstances //act屏幕旋转重建时...在ActivityThread.performLaunchActivity中被调用, //ActivityThread.java Activity performLaunchActivity(ActivityClientRecord...优缺点 优点: 页面退出时,自动销毁 屏幕旋转、语言切换后数据不丢失,而onSaveInstanceState在面对复杂数据时需要序列化 不持有view层,方便单元测试 缺点: 虽然要比onSaveInstanceState
10、面试官:当旋转屏幕时,Activity如何响应? 11、面试官:你是如何做到旋转屏幕时防止数据重新加载和重置的? 12、面试官:说一下AsyncTasks和线程他们的区别!...在 Activity 生命周期中,无论是在应用程序启动时,还是在Activity 被销毁然后重新创建(例如在配置更改期间)时,都会调用一次 onCreate() 方法。...Standard 是默认的,就是在不指定启动模式的时候用到的是这个!其他的在指定的时候使用! 面试官:你糊弄我呐?...应聘者:旋转屏幕时,当前的 Activity 实例将被破坏,并以新的方向创建Activity的新实例。旋转屏幕时,由于屏幕旋转时会重新创建布局,将首先调用onCreate() 方法。...第三波 11、面试官:你是如何做到旋转屏幕时防止数据重新加载和重置的?
B启动模式为singleInstance不变,A→B→C的时候点击两次返回,生命周期如何调用。 屏幕旋转时Activity的生命周期,如何防止Activity重建。 介绍几种启动模式。...屏幕旋转时Activity的生命周期,如何防止Activity重建。...切换屏幕的生命周期是:onConfigurationChanged->onPause->onSaveInstanceState->onStop->onDestroy->onCreate->onStart...->onRestoreInstanceState->onResume 如果需要防止旋转时候,Activity重新创建的话需要做如下配置:在targetSdkVersion的值小于或等于12时,配置 android...:configChanges="orientation", 在targetSdkVersion的值大于12时,配置 android:configChanges="orientation|screenSize
现在知道的做法也就只有在使用ActionBarDrawerToggle的使用在onPostCreate需要在屏幕旋转时候等同步下状态,Google官方提供的一些实例就是如下做法: @Overrideprotected...onCreate方法只在Activity创建时执行一次,而onStart方法在Activity的切换以及按Home键返回桌面再切回应用的过程中被多次调用。...,此方法会被调用; 在用户改变屏幕方向时,此方法会被调用; 在当前Activity跳转到其他Activity或者按Home键回到主屏,自身退居后台时,此方法会被调用。...第一种情况我们无法保证什么时候发生,系统根据资源紧张程度去调度;第二种是屏幕翻转方向时,系统先销毁当前的Activity,然后再重建一个新的,调用此方法时,我们可以保存一些临时数据;第三种情况系统调用此方法是为了保存当前窗口各个...onRestoreInstanceState调用 在Activity被覆盖或退居后台之后,系统资源不足将其杀死,然后用户又回到了此Activity,此方法会被调用; 在用户改变屏幕方向时,重建的过程中,
1.1 出场背景 在详细介绍ViewModel前,先来看下背景和问题点。 Activity可能会在某些场景(例如屏幕旋转)销毁和重新创建界面,那么存储在其中的界面相关数据都会丢失。...看到在因屏幕旋转而重新创建Activity后,ViewModel对象依然会保留。只有Activity真正Finish的时ViewModel才会被清除。...4.1 使用场景 在我很久之前一篇文章《Activity生命周期》中有提到: onSaveInstanceState调用时机: 当某个activity变得“容易”被系统销毁时,该activity的onSaveInstanceState...3、按下电源按键(关闭屏幕显示)时。 4、从activity A中启动一个新的activity时。 5、屏幕方向切换时,例如从竖屏切换到横屏时。...在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行。
接到一个博友的反馈,在屏幕旋转时调用 PopupWindow 的 update 方法失效。...使用场景如下:在一个 Activity 中监听屏幕旋转事件,在Activity主布局文件中有个按钮点击弹出一个 PopupWindow,另外在主布局文件中有个 ListView。...测试结果发现:如果 ListView 设置为可见(visibile)的话,屏幕旋转时调用的 update 方法无效,如果 ListView 设置为不可见(gone)或者直接删除的话,屏幕旋转时调用的update...-- 这个ListView的显示隐藏直接影响到PopupWindow在屏幕旋转的时候update方法是否生效 --> <ListView android:id="@+id/listview"...android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="监听屏幕旋转并调用
按下电源按键(关闭屏幕显示)时。 从activity A中启动一个新的activity时。 屏幕方向切换时,例如从竖屏切换到横屏时。...在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行。...另外,onRestoreInstanceState的bundle参数也会传递到onCreate方法中,你也可以选择在onCreate方法中做数据还原。...如下所示: android:configChanges="keyboardHidden|locale|screenSize|orientation"//调出键盘、切换系统语言、屏幕尺寸(旋转屏幕时...)改变、屏幕方向的改变时,不会重建Activi
并且系统调用onSaveInstanceState()方法的时机一般是在onStop()之前,但是也有可能是onPause之前。...并且系统调用onRestoreInstanceState()的时机,是在onStart()之后,onResume之前。...method stub super.onRestoreInstanceState(state); } 几乎Android框架中的每一个widget都适当的实现了这个方法,这样任何可见的UI更改活动在重新创建时自动保存和恢复...所以我们可以用下面的办法,来测试Activity的状态保存。 就是旋转设置,让屏幕方向变化(当然前提是你没有锁定设置的旋转功能,Activity也没有设置屏幕方向)。...当屏幕方向变化时,系统为了新的屏幕配置寻找替代资源,会销毁和重建Activity。
本章讲述 Activity 生命周期、状态以及状态切换时系统调用的方法。...(发生在点击了后腿按钮) Stopped 表示 activity 在内存中具有实例,但其视图在屏幕上不可见。...通常,通过覆盖 onCreate(Bundle) 方法,activity 可以预处理以下 UI 相关工作: 实例化组件并将它们放置在屏幕上(调用setContentView(int)方法); 引用已实例化的组件...设备配置实际是指屏幕方向、屏幕像素密度、屏幕尺寸、键盘类型、语言等。 在运行时配置变更(runtime configuration change)发生时,可能会有更合适的资源来匹配新的设备配置。...onCreate(Bundle) 方法中取回这些数据,解决旋转问题。
从以下几个方面详细说一下Activity的生命周期: 1.回到主屏幕再打开和退出程序的时候。 2.屏幕旋转的时候。 3.打开其它的Activity的情况。 ...和我们看官方的文档一至,在Activity被停止后再次激活的时候 才会被调用。...2.旋转屏幕的时候。 运行我们的应用程序,和第一次打开一样调用create,start.和resume ? 接下来我们旋转一下屏幕看一下会发生什么。 ? 一下子。调用了好多。...这里就要注意了,如果我们的程序 需要支持屏幕旋转,那我这就要调用onSaveInstanceState()方法来保存当前的数据状态,在onCreate方法里恢复 这些状态的值。...然后在主页面上按一下我们的按钮,打开另一个Activity. ? 按返回键看一下。 ? 它会调用onRestart(),onStart(),onResume。
()一个参数和两个参数的区别: 在重写Activity的onCreate()方法时会发现,这玩意有两个参数: ?...:当系统"未经你许可"时销毁了你的activity,则onSaveInstanceState会被系统调用, 这是系统的责任,因为它必须要提供一个机会让你保存你的数据(你可以保存也可以不保存)。...之所以有两个可以获取到保存数据的方法,是为了避免Act跳转而没有关闭, 然后不走onCreate()方法,而你又想取出保存数据~ 说回这个Activity拥有了持久化的能力,增加的这个PersistableBundle...横竖屏切换时Act走下述生命周期: onPause-> onStop-> onDestory-> onCreate->onStart->onResume 关于横竖屏切换可能遇到下述问题: 1.先说下如何禁止屏幕横竖屏自动切换吧...如果用户旋转设备这屏幕会横竖屏切换。 nosensor:忽略物理感应器,这样就不会随着用户旋转设备而更改了("unspecified"设置除外)。
一般情况下,当当前Activity从不可见重新变为可见状态时,onRestart就会被调用。 onResume:表示Activity已经可见了,并且出现在前台并开始活动。...是配对的,随着用户操作或者设备屏幕的点亮和熄灭,这两个方法可能被调用多次。...异常情况分两种: 1、资源相关的系统配置发生改变导致Activity被杀死并重新创建 2、资源内存不足导致低优先级的Activity被杀死 针对第一种,比如说当前Activity处于竖屏状态,如果突然旋转屏幕...关于旋转屏幕这一块,要想了解更详细的介绍,可参考我的Android四大组件详解一文。...的调用时机在onStart之后。
在android中有两种context,一种是application context,一种是activity context,通常我们在各种类和方法间传递的是activity context。...而不是用ACtivity,这就保证了数据库的操作与activity无关(不会一直引用Activity的资源,防止内存泄漏) 应用场景: 比如一个activity的onCreate: protected...当屏幕旋转的时候,系统会销毁当前的activity,保存状态信息,再创建一个新的activity。...比如我们写了一个应用程序,它需要加载一个很大的图片,我们不希望每次旋转屏幕的时候都销毁这个图片重新加载。...当屏幕旋转的时候会有leak(即gc没法销毁activity)。 我们刚才说过,屏幕旋转的时候系统会销毁当前的activity。
领取专属 10元无门槛券
手把手带您无忧上云