横竖屏切换的引发的问题总结
2016-09-24 23:46
281 查看
有关于横竖屏切换网上有很多总结,很多以前的总结说横屏切换竖屏会走2次生命周期,然而测试时候不管任何切换仅仅走了一次,只有实践才能说明一切,在他们那个年代,我相信他们也是正确的,可能因为时间的推移api的改变导致的.
接下来开始几个小例子:
一.先总结下横竖屏切换输入框的保存状态
我用一个没有设置id的EditText,和一个设置了id的EditText,分别输入对应的文字(这里没有配置configchanges方法):
旋转后(不带id的消失):
总结:
默认状态下系统默认旋转时候,默认会保存有id的EditText的文字,没有设置id的EditText文字消失
二.总结下关于生命周期的变化
大家都知道,如果想解决横竖屏切换时,activity不重新创建,需要在manifest中配置
然而有些App仅仅设置
以实例测试才能证明:
测试环境安卓5.0环境下,
测试代码:
(1)清单没有配置任何configchange:
targetSdkVersion 12以及以下,结果如下:
targetSdkVersion 12以上(不包括12),结果如下:
(2)接下来清单文件配置android:configChanges=”orientation”
在targetSdkVersion12以及以下,结果如下:
在targetSdkVersion12以上会调用:
(3)接下来再配置:
android:configChanges=”orientation|keyboardHidden”
在targetSdkVersion12以及以下,结果如下:
在targetSdkVersion12以上会调用:
(4)接下来再配置:
android:configChanges=”orientation|keyboardHidden|screenSize”
在targetSdkVersion12以及以下,结果如下:
在targetSdkVersion12以上会调用:
结论:
1.切换横竖屏仅仅会调用一次生命周期方法
2.设置
3.不设置
4.设置了
欢迎大家交流,有问题请指正。
接下来开始几个小例子:
一.先总结下横竖屏切换输入框的保存状态
我用一个没有设置id的EditText,和一个设置了id的EditText,分别输入对应的文字(这里没有配置configchanges方法):
旋转后(不带id的消失):
总结:
默认状态下系统默认旋转时候,默认会保存有id的EditText的文字,没有设置id的EditText文字消失
二.总结下关于生命周期的变化
大家都知道,如果想解决横竖屏切换时,activity不重新创建,需要在manifest中配置
android:configChanges="orientation|keyboardHidden"属性,当然在api>13的时候,你需要额外添加一个参数,就是
screenSize,不添加这个,在api 13以上的手机是不会生效的。
然而有些App仅仅设置
android:configChanges="orientation|keyboardHidden"属性,然后就可以达到不重新activity创建,其实原因就在于targetSdkVersion 属性,如果小于12的话,仅仅设置
orientation|keyboardHidden属性即可达到不重新走activity生命周期方法,会走onConfigurationChanged,如果大于12的话,那么必须再加上
screenSize属性才能达到效果
以实例测试才能证明:
测试环境安卓5.0环境下,
测试代码:
public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e(TAG, "onCreate:"); } @Override protected void onStart() { super.onStart(); Log.e(TAG, "onStart: "); } @Override protected void onResume() { super.onResume(); Log.e(TAG, "onResume: "); } @Override protected void onPause() { super.onPause(); Log.e(TAG, "onPause: "); } @Override protected void onStop() { super.onStop(); Log.e(TAG, "onStop: "); } @Override protected void onDestroy() { super.onDestroy(); Log.e(TAG, "onDestroy: "); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Log.e(TAG, "onSaveInstanceState: "); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); Log.e(TAG, "onRestoreInstanceState: "); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.e(TAG, "onConfigurationChanged: "); } }
(1)清单没有配置任何configchange:
targetSdkVersion 12以及以下,结果如下:
targetSdkVersion 12以上(不包括12),结果如下:
(2)接下来清单文件配置android:configChanges=”orientation”
在targetSdkVersion12以及以下,结果如下:
在targetSdkVersion12以上会调用:
(3)接下来再配置:
android:configChanges=”orientation|keyboardHidden”
在targetSdkVersion12以及以下,结果如下:
在targetSdkVersion12以上会调用:
(4)接下来再配置:
android:configChanges=”orientation|keyboardHidden|screenSize”
在targetSdkVersion12以及以下,结果如下:
在targetSdkVersion12以上会调用:
结论:
1.切换横竖屏仅仅会调用一次生命周期方法
2.设置
android:configChanges="orientation|keyboardHidden|screenSize",在targetSdkVersion12上下都表现为不重新创建,不会走生命周期,只会走onConfigurationChanged方法
3.不设置
android:configChanges="orientation"属性表现为都会重新创建activity,重走生命周期
4.设置了
android:configChanges="orientation|keyboardHidden"或
android:configChanges="orientation"在targetSdkVersion12以及以下(包含12)不会创建activity,重新走activity生命周期方法,会走onConfigurationChanged,如果大于12的话,重新创建,重走activity生命周期
欢迎大家交流,有问题请指正。
相关文章推荐
- 安卓横竖屏切换问题总结
- 关于安卓横竖屏切换问题(学习总结)
- 安卓横竖屏切换问题总结
- Android横竖屏切换相关总结
- 一点横竖屏切换的问题
- 关于Android 横竖屏切换的问题
- Android横竖屏切换相关总结
- Android横竖屏切换问题
- 解决Android横竖屏切换数据丢失问题
- Android开发日志之横竖屏切换数据保存问题
- 关于横竖屏切换的问题解决
- Android横竖屏切换总结
- 一个G1 的问题引发对Linux命令总结——超级终端裸装apk程序
- Android横竖屏切换总结
- Android 横竖屏切换问题
- Android横竖屏切换总结
- troPipeServer.WaitForConnection()引发的思考。尤其是第二条总结。如果要解决某个问题是一定能解决的,至于怎么解决就要想办法,动脑筋
- [Android1.6]横竖屏切换时自动弹出键盘的问题
- 关于横竖屏切换问题几点知识(Android学习随笔一)
- Android横竖屏切换总结