更快的屏幕方向更改
Android操作系统已经被非常多的手机硬件所采用。就目前推出的第一款安装有Android操作系统的T-Mobile G1,在G1上可以体验到旋转手机从而实时的改变屏幕显示模式,比如我们打开硬件键盘,屏幕将会实时的从纵向显示转变为横向显示。
为了达到简化开发的目的,可以在屏幕变化时自动保存现有的资源或者一些必要的信息从而在变化后可以很快的根据新的标准重新恢复Activity所包含的内容。Android基于这方面的考虑预置了一种可以调用特定资源从而匹配屏幕变化的行为,比如说标记横向屏幕所对应的layout或者一些drawables资源。关于这方面的资料可以查看官方给出的详细说明(read the official documentation on resources).
对于开发者来讲需要非常重视对这个预置的功能应用,因为它可以使应用程序实时根据屏幕的调整做出最合理的匹配方案。桌面从纵向调整为横向显示需要明确Activity是如何做出反应的,这对于一些刚刚接触Android平台的人来讲在理解上会有一些困难,Activity响应显示模式变化要经过 destroyed和recreated两个过程,通过recreated可以出发程序对最新的显示模式做出反应。
当应用程序在运行时需要表现大量的数据或者需要通过网络加载某些资源时,如果我们在显示模式的变化中不做任何干预,那么同样的应用程序将需要重新加载必要的预置数据,这样每次改变显示模式都将花费同样的时间来重复加载相同的资源。
通过一个更典型的例子来理解这个过程,Photostream通过网络下载6幅图片并显示在屏幕中,并且针对两种显示模式提供相对的layout和drawables匹配方案:
在这个例子中可以清楚的理解,我们不希望用户在改变现实模式时重新加载大量的数据。那么针对这样的问题我们可以借鉴一些主流浏览器所采取的方法,建立一个暂存区来保留临时文件(例如检测到设备提供SD Card,从而把临时文件存放在里边),这样我们可以再重新改变现实模式后可以通过临时文件快速的重新加载数据内容。那么通过什么方式才能优化是否为程序提供暂存文件的功能呢?(可能有些程序并不需要这样必须的行为,所以没有必要额外的利用外界的存储设备)值得庆幸的是Android为我们提供了onRetainNonConfigurationInstance()方法,Activity的基类中声明了这个虚函数,可以让开发者在自己的应用程序中决定是否实现这个函数的函数体,借用上边的例子我们可以用如下代码来保存临时图片:
@Override
public Object onRetainNonConfigurationInstance() {
final LoadedPhoto[] list = new LoadedPhoto[numberOfPhotos];
keepPhotos(list);
return list;
}
之后便可以在activity的onCreate()函数中实现重新调用临时文件,在代码中需要判断系统是否需要重新加载临时文件。以下是放在OnCreate()函数中加载临时文件的代码:
private void loadPhotos() {
final Object data = getLastNonConfigurationInstance();
// The activity is starting for the first time, load the photos from Flickr
if (data == null) {
mTask = new GetPhotoListTask().execute(mCurrentPage);
} else {
// The activity was destroyed/created automatically, populate the grid
// of photos with the images loaded by the previous activity
final LoadedPhoto[] photos = (LoadedPhoto[]) data;
for (LoadedPhoto photo : photos) {
addPhoto(photo);
}
}
}
对于大多数的情况并不需要做如上的操作,所以需要谨慎使用这个行文,毕竟最好的行为也并不适用于所有情况,如果应用的不好反而会给程序带来不必要的麻烦。
- 大小: 102.4 KB
- 大小: 122.1 KB
分享到:
相关推荐
您可以在录制或捕获屏幕时轻松隐藏无框视频的录制窗口,将宽高比更改为宽屏,垂直或方形。 它是一个稳定的屏幕录像机,可以录制任何应用程序的教程和捕获屏幕视频 只需轻轻一按即可开始录制带声音的手机上的所有内容...
haarcascade_frontalface_alt.xml 、 haarcascade_frontalface_default.xml: 用于人脸检测的haar分类器,网上普遍说第一个效果更好,第二个运行速度更快 data_gen.py:生成我们所需的数据 trainer.py: 训练数据集 ...
✓录制或捕捉屏幕时,您可以轻松隐藏无框视频的录制窗口,将宽高比更改为宽屏,垂直或方形。 ✓这是一个稳定的屏幕录像机,可以录制任何应用程序的教程和捕获屏幕视频。 ✓只需轻轻一按即可开始录制带声音的手机上的...
由于对 Sibelius 处理装饰音的方式进行了改进,您现在可以将任意值的装饰音添加到任意语音中的任意节奏,实现完美一致,从而使您可以更快创建更美观的乐谱。 四月 同时进行多个文本更改 需要在乐谱的多个分谱中添加...
由于对 Sibelius 处理装饰音的方式进行了改进,您现在可以将任意值的装饰音添加到任意语音中的任意节奏,实现完美一致,从而使您可以更快创建更美观的乐谱。 四月 同时进行多个文本更改 需要在乐谱的多个分谱中添加...
移动吉特盒子在屏幕上的位置:alt 键盘方向键(在使用多显示器时,此功能只能在主屏幕使用 ) 英语辞典查询:输入单词后,按shift 回车 在百度知道里搜索:输入关键字后,按ctrl alt 回车 手气不错功能:ctrl 回车...
2.*服务端 修改上线间隔时间,上线更快。 3.*服务端 修正当"更新至所选服务端"时,有时不能立刻重连的bug。 4.*服务端 修正当被停止并再次启动服务端安装的服务,可能导致卸载或更新时出现频繁上下线的问题。 5.*...
★文件对照 方便的找出两个文本文件第一处的不同的内容的具体位置,使您更快的找到两个文本的不同点。 新增功能: ●标准紧固件库及智能调入工具 方便、高效,在这里您不用再为繁琐的紧固件绘制烦恼了,智能化的...
技巧与提示下列技巧和提示有助于您在 Sweet Home 3D 中更好更快地构建家居模型。全局用鼠标拖曳对象目录、家居对象列表、家居平面图和家居3D视图间的分隔条可以更改窗格的大小。如果在试用 Sweet Home 3D ...
欢迎使用《iPai图片批处理》5.8版! 《iPai 图片批处理》是一款旨在简化图片...摄像头拍照、屏幕截图、图片裁剪、移动图片、颜色矩阵、制作边框等更多功能使用技巧请关注我们的官方网站和论坛,这里不再一一列举。
下列技巧和提示有助于您在 Sweet Home 3D 中更好更快地构建家居模型。全局用鼠标拖曳物件目录、家居物件列表、家居平面图和家居3D视图间的分隔条可以更改窗格的大小。如果在试用 Sweet Home 3D 各项功能的...
2. 使用导入功能时,增加对备份文件后缀名的判断以更快的校验其合法性,此外将后缀名由.db改为.pdb以更好的区别于其他文件。 3. 对执行删除记录列表中记录的操作时蓝色高亮条的位置变化进行了调整使之更智能更符合...
阅读时切换屏幕方向导致字体超出屏幕的BUG 欢迎屏幕上的日期使用中文显示 如果使用触屏手机,跳转改为进度条模式,以方便触屏操作 系统路径下如果存在bg.png文件,则会作为欢迎界面的背景图片显示(右下角) 减少跳转...
静态编译后的易语言可执行程序(exe)和动态链接库(dll),运行时不再依赖任何支持库文件,文件尺寸更小(相对以前的独立编译),PE结构更合理(取消了“易格式体”),加载速度更快,而且有效解决了“病毒误报”和...
7.6.4 更改文本框的旋转方向 150 7.6.5 更改文字方向 151 7.6.6 设置内部边距 152 7.6.7 创建多栏 152 7.7 小结 152 第8章 更正和精炼文本 153 8.1 查找和替换文本 153 8.2 更正拼写 154 8.2.1 ...
7.6.4 更改文本框的旋转方向 150 7.6.5 更改文字方向 151 7.6.6 设置内部边距 152 7.6.7 创建多栏 152 7.7 小结 152 第8章 更正和精炼文本 153 8.1 查找和替换文本 153 8.2 更正拼写 154 8.2.1 ...