Android Activity的横竖屏切换与状态保存
2017-08-02 16:33
302 查看
记得之前参加了一场面试,其中一个问题;横竖屏切换的生命周期变化?
无奈平时开发没有接触到横竖屏切换,所以当时还真不清楚。
到底如何变化,还是自己手动写代码测试来的更舒服。
关于Activity周期不清楚的可以参见:
http://blog.csdn.net/demonliuhui/article/details/65631920
横竖屏切换的过程中生命周期的变化为:
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期.
3、设置Activity的android:configChanges=”orientation|screenSize”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。
我们在在onCreate(Bundle savedInstanceState)中添加如下代码:
根据上图可知,在进行横竖屏切换的过程中,也会调用onSaveInstanceState(Bundle outState)保存状态。然后在onCreate(Bundle savedInstanceState)中便可恢复状态。
无奈平时开发没有接触到横竖屏切换,所以当时还真不清楚。
到底如何变化,还是自己手动写代码测试来的更舒服。
关于Activity周期不清楚的可以参见:
http://blog.csdn.net/demonliuhui/article/details/65631920
横竖屏切换的代码
代码很简单,重写Activity几个生命周期的方法即可。public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); Log.i(TAG, "onCreate------------"); setContentView(R.layout.activity_main); } @Override protected void onRestart() { super.onRestart(); Log.i(TAG, "onRestart: --------------"); } @Override protected void onResume() { super.onResume(); Log.i(TAG, "onResume: -----------------"); } @Override protected void onPause() { super.onPause(); Log.i(TAG, "onPause: -----------------"); } @Override protected void onStop() { super.onStop(); Log.i(TAG, "onStop: -------------------"); } @Override protected void onDestroy() { super.onDestroy(); Log.i(TAG, "onDestroy: -----------------"); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.i(TAG, "onConfigurationChanged: "); } }
启动后连续旋转屏幕
设置android:configChanges=”orientation|screenSize”,连续旋转屏幕
关于onConfigurationChanged以及onConfigurationChanged 未被调用的问题<activity android:name=".MainActivity" android:configChanges="orientation|screenSize"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity>
分析
根据上图的结果可知:横竖屏切换的过程中生命周期的变化为:
onPause()----->onStop()------>onDestroy()-------->onCreate(Bundle savedInstanceState)------>onResume()
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期.
3、设置Activity的android:configChanges=”orientation|screenSize”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。
状态保存
添加如下代码,onSaveInstanceState(Bundle outState)在活动回收前一定会调用。@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Log.i(TAG, "onSaveInstanceState: ----------------"); String s = "hello world!"; outState.putString("text", s); }
获取保存的状态
看到onSaveInstanceState(Bundle outState)的函数名及参数类型,你一定会感到特别熟悉,没错,onSaveInstanceState(Bundle outState)中的outState参数,就是onCreate(Bundle savedInstanceState)中的savedInstanceState。我们在在onCreate(Bundle savedInstanceState)中添加如下代码:
if (savedInstanceState != null) { String s = savedInstanceState.getString("text"); System.out.println(s); }
运行
根据上图可知,在进行横竖屏切换的过程中,也会调用onSaveInstanceState(Bundle outState)保存状态。然后在onCreate(Bundle savedInstanceState)中便可恢复状态。
相关文章推荐
- 视频播放以及横竖屏切换保存播放状态
- Fragement横竖屏切换时保存状态
- android 的数据状态保存,横竖屏切换时的操作
- 保存Activity的状态(切换横竖屏时)
- ListView 在设备切换横竖屏时保存状态
- android fragment+ FragmentTabHost+viewpager 切换状态不保存的问题
- android横竖屏切换总结-布局改变和数据保存
- 【Android】保存Fragment切换状态
- 【Android】保存Fragment切换状态
- Android开发日志之横竖屏切换数据保存问题
- android: 横竖屏切换总结-布局改变和数据保存
- 【Android】保存Fragment切换状态
- android Fragment实现Tab功能(fragment相互切换时,可保存之前状态)
- Android】保存Fragment切换状态
- 【Android】保存Fragment切换状态
- Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- Android Fragment的子fragment之间切换保存状态遇到的坑
- android: 横竖屏切换总结-布局改变和数据保存
- 如何修改Android设备状态条上音量加减键在横竖屏的时候的切换与显示
- 解决切换Fragment状态不保存 以及各个Fragment之间的通信