默认情况下,Activity在Configuration变化(比如设备横竖屏切换)时,会执行onDestory()周期函数,然后onCreate(),重新创建Activity。之所以这样是因为这样可以让Activity动态适应Configuration,比如横屏时使用横屏的layout,drawable等resources,竖屏时使用竖屏的layout,drawable等resources。重启Activity可能导致大量数据的重新获取,网络连接的重新建立等问题,用户体验非常差。Android Dev guide给出两种解决方案
1)在Configuration变化时,保持数据不变
2)你自己处理,而不是重启Activity
下面分别详细介绍一下这两种方法
1)在Configuration变化时,保持数据不变。需要注意的是我们不应该保存那些依赖Activity的数据,比如Drawable,Adapter,View或者任何与Context相关联的数据。因为上一个Activity已经没有了,如果你还要保持这些资源的引用,可能导致资源泄露。使用方法如下:
重写Activity.onRetainNonConfigurationInstance(),保存数据
@Override
public Object onRetainNonConfigurationInstance() {
final MyDataObject data = collectMyLoadedData();
return data;
}
在onCreate()中调用getLastNonConfigurationInstance(),获取onRetainNonConfigurationInstance()保存的数据
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance();
if (data == null) {
data = loadMyData();
}
...
}
2)你自己处理,而不是重启Activity。这种方法相对简单一些,缺点是动态适应差。比如横竖屏切换时需要你自己写代码来使用不同的layout等resource,语言设置的动态改变等,不推荐。使用方法如下:
在AndroidManifiest.xml中为当前的Activity设置android:configChanges
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
重写Activity.onConfigurationChanged(),做一些相应的动作,如果没有则可以不用重写
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}
详情请参考:http://developer.android.com/guide/topics/resources/runtime-changes.html
分享到:
相关推荐
Android横竖屏切换处理Demo源码.rar
Android应用源码开发Demo,主要用于毕业设计学习。
安卓Android源码——(横竖屏切换处理).rar
安卓Android源码——(横竖屏切换处理).zip
android 横竖屏切换的处理,效果更好些
activity横竖屏切换时重新onCreate的处理。
源码参考,欢迎下载
Android应用源码之(横竖屏切换处理.zip项目安卓应用源码下载Android应用源码之(横竖屏切换处理.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
在开发中常要处理横竖屏切换,怎么处理先看生命周期 申明 Activity 横竖屏切换时需要回调两个函数 ,所以在此将这个两个函数暂时看成是Activity 横竖屏切换的生命周期的一部分,这两个函数如下 onSaveInstanceState...
Android 应用开发源码 参考与学习使用
android经典开发案例60个(源码类)例:Activity生命周期、横竖屏切换处理等
今天小编就为大家分享一篇关于Android中Fragment的分屏显示处理横竖屏显示的实现方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
Android 手机一般都支持横竖屏旋转,系统也会提供一个设置,控制允不允许旋转。这里对如何在 App 中控制界面的旋转方向做一个小结。 界面旋转方向的决定因素 决定一个界面显示为横屏/竖屏的因素有几个: 系统的...
实现自定义视频播放器,改变屏幕亮度,调节音量大小,横竖屏切换处理。
该资源主要是结合博客...免费资源仅供大家学习参考,同时项目主要是讲述Matrix的方法,在加载大图片时可能会出现越界bug,横竖屏切换都没有考虑.希望对大家有所帮助吧!By:Eastmount
前言 在日常开发中的时候,我们经常会使用ViewPager+Fragment进行视图滑动,在某些部分逻辑也许我们需要利用上下文Context(例如基本的Toast),但是由于Fragment只是依附在Activity容器... (三)横竖屏幕切换的时候
高仿优酷视频播放器,无需代码修改,支持播放各种格式视频以及视频横竖屏切换,进度条拖动,暂停续播等操作已经全部处理好。
3-12-6(横竖屏切换处理) 3-3(ImageButton图片按钮) 3-4(EditText文本编辑) 3-5(CheckBox与监听) 3-6(RadioButton与监听) 3-7(ProgressBar进度条) 3-8(SeekBar 拖动条) 3-9(Tab分页式菜单) 4-10(可视区域) 4-11-1...
一个android的小app源码,包括,百度定位sdk,请求数据处理,appwedget,横竖屏切换