前言
本章内容为开发者指南(Dev Guide)/Best Practices/Optimizing Apps for Android 3.0,译为“为Android 3.0优化应用程序",版本为Android3.0 r1,翻译来自"移动云_文斌",欢迎访问它的博客:"http://blog.csdn.net/caowenbin",再次感谢"移动云_文斌" !期待你一起参与翻译Android的相关资料,联系我over140@gmail.com。
声明
欢迎转载,但请保留文章原始出处:)
原文
http://developer.android.com/guide/practices/optimizing-for-3.0.html
(原文已更新,下面链接可以看到本文原文2011-5-4:http://www.devdiv.com/android/docs/guide/practices/optimizing-for-3.0.html )
如果你正在开发Android应用程序,在Android 3.0中提供了为平板或类似设备增强用户体验的新特性。一般情况下,由于Android应用程序的向下兼容性,任何你已经发行的应用程序都能在Android 3.0设备上运行。然后,还是可以通过一些简单的修改来为平板类型的设备进行优化。
本文描述的是你怎样为Android 3.0优化现存的应用程序,并且能和老版本进行兼容,或者使用新的API完整的升级你的应用程序。
内容包括:
1. 安装Android 3.0 SDK
2. 选择优化或升级:
a) 平板电脑或类似设备优化应用
你已经有现存的应用,想为老版本的Android保持兼容性
b) 为平板电脑或类似设备升级或开发新的应用
你想使用Android 3.0的API升级你的应用,或者面向平板电脑或类似设备创建新的应用。
安装Android 3.0SDK(Set Up Your SDK with Android 3.0)
要在Android 3.0上开始测试或开发你的应用程序,需要使用新的平台来配置现存的Android SDK:
(如果你还没有Android SDK,现在就去下载吧)
1. 运行Android SDK和AVD管理器并安装如下内容:
* Android 3.0 平台SDK
* Android SDK工具,版本10
* Android SDK 平台工作,版本3
* Android SDK文档,API 11
* SDK API 11的示例代码
2. 为平板类型设备创建AVD
设置target为“Android 3.0”,skin为“WXGA”(默认的skin)
关于模拟器性能(About emulator performance)
因为Android模拟器必须在你的计算机模拟ARM指令集,并且WXGA屏幕比典型的虚拟设备大很多,所以模拟器的性能远比真实的设备低。
特别是在初始化模拟器时很慢,根据你的硬件情况,需要花较长时间。当模拟器启动时,已经限制了用户响应,所以请耐心等待直到Home界面(或解锁界面)出现。
无论如何,你不需要每次重新生成你的应用程序的时候都重新启动模拟器,通常情况下你只需要启动一次并让它保持运行即可。也可以参考下面的提示信息以在首次初始化后减少启动次数。
我们正在努力的解决性能问题并在将来发布,目前,模拟器仍然是在没有真实设备的情况下评估你的应用程序表现和功能的最好途径。
提示:要减少模拟器的启动次数,可以在你利用SDK和AVD管理器创建它时允许AVD快照(在AVD创建时有一个Enable snapshots的复选框)。然后,从AVD管理器启动AVD并检查Launch from snapshot和Save to snapshot,利用这种方式,当你关闭模拟器时,一个AVD状态的快照就被保存起来,模拟器关闭时会变慢。当你已经拥有了一个初始化后的快照后你可以取消Save to snapshot(在首次关闭AVD之后)。
为平板电脑或类似设备优化应用
(Optimize Your Application for Tablets and Similar Devices)
如果你已经为早期的Android版本开发了应用,可以在不改变最低版本需求的情况下做几个事情为Android 3.0的平板类型设备进行优化。(不需要修改你的manifest中的android:minSdkVersion)
注意:所有的Android应用程序都是前向兼容的,因此,如果你按标准使用了Android的API,你什么也不用做,应用就可以在Android 3.0的设备上工作得很好。但是,为了向使用Android 3.0平板或类似设备管理的用户提供更好的体验,你应该更新你的程序来适应新的系统主题并为大屏幕提供优化。
这里有几件事情可以为运行Android 3.0的设备优化你的应用程序:
1. 在Android 3.0上测试你当前的应用
1. 生成你的应用程序并在Android 3.0 AVD(上文中创建的AVD)上安装
2. 运行你通常的测试以确认所有功能看起来正常
2. 在你的应用中应用新的“holographic”主题
1. 打开你的manifest文件并修改<uses-sdk>标识,设置android:targetSdkVersion为”11”,例如:
<manifest ... >
<uses-sdk android:minSdkVersion="4"
android:targetSdkVersion="11" />
<application ... >
...
<application>
</manifest>
针对Android 3.0的目标平台,系统会自动为运行在Android 3.0设备上的每一个activity应用holographic主题,这个主题为控件提供了新的设计,例如按钮和文本框,并且修改了其他的可视化元素。这个标准化主题是为Android 3.0制作的,所以你的应用程序将看起来会呈现这一样式。
另外,这个主题能够使用Action Bar,用于取代在activity顶部的传统的标题栏,并且提供用户访问activity的选项菜单位。
2. 继续使用android:minSdkVersion指定的最低版本编译程序,但仍然安装在Android 3.0 AVD上,反复测试并确保你的用户接口在holographic主题下工作正常。
提示:如果你在activity中直接应用了其他主题,它将会取代holographic主题,解决的办法是你可以使用system version qualifier来为基于holographic主题的android 3.0的设备提供选择。更多信息可参考select a theme based on platform version。
3. 超大屏幕选择布局
通过运行时为超大屏幕提供可选资源,你能不用采用新的API就让你的应用提供在平板类型设备上的用户体验。
例如,这里列出了为超大屏幕创建新布局时所要考虑的因素:
* 横向布局:平板类型设备通常默认的方向是横向的,因此你应该确保你的activity为宽视野做了优化。
你可以使用land资源,但是如果你想为超大的横屏选择资源的话,你应该同时使用xlarge和land。例如res/layout-xlarge-land/,这些限定名称的是有顺序要求的,详见Providing Alternative Resources。
* 按钮位置:考虑当两只手持有平板设备时你UI中按钮的位置是否易于操作。
* 字号大小:确保你的应用使用sp单位进行字号设置,这会单独影响到可读的体验,很多情况下,你可能需要为xlarge配置大些的字号。
总之,确认你的应用符合Best Practices for Screen Independence。
为平板电脑或类似设备升级或开发新的应用
Upgrade or Develop a New App for Tablets and Similar Devices
如果你想开发全部运行在Android 3.0的平板类型设备上的应用程序,那就需要使用Android 3.0新的API,本节介绍可用的一些新特性。
声明最低的系统版本
当你创建Android 3.0的项目时,首先要做的就是设置android:minSdkVersion为11,例如:
<manifest ... >
<uses-sdk android:minSdkVersion="11" />
<application ... >
...
<application>
</manifest>
针对Android 3.0平台,系统会自动为你的每一个activity应用新的主题。
另外,也会为每个activity使用Action Bar。
使用Action Bar
Action Bar是为每个activity提供的用于替换屏幕顶端传统标题栏的控件,通常,在它的左侧跟在Activity标题后边包含应用程序图标,在右侧是选项菜单中的可用项。
在你的菜单资源中增加showAsAction=”ifRoom”,可以使得选项菜单就像“活动项目”一样直接出现在Action Bar中。另外,也可以在其中加入像标签一样的导航功能,可以使用应用程序图标导航到主activity,或者向上返回到activity历史。
更多信息请参考Using the Action Bar。
使用fragment分离activity
在Activity中Fragment提供分离用户行为和接口的表现方式。你可以在一个activity中合并多个fragment以生成多面板的UI,也可以在多个activity中重用fragment。可以认为一个fragment就像一个activity中的模块,它提供了自己的生命周期,接收用户的输入事件,并且可以在activity运行时添加或移除。
例如,一个新闻应用程序可以使用一个fragment在左侧显示标题列表,使用另一个fragment在右侧显示文章内容——这些fragment出现在一个activity中,每个fragment都有自己的生命周期,单独处理用户的输入。因此,用户不是在一个activity中选择标题然后在另一个activity中阅读内容,而是可以在同一个activity内既选择又阅读。
更多信息参考Fragments文档。
使用新的动画API实现变换
全新的可伸缩的动画框架允许你将动画效果应用到任何对象的任意属性上(View,Drawable,Fragment,Object等等),通常,你可以为对象的int,float和16进制的颜色值定义很多动画因素(例如持续时间,重复次数,插入器等),当一个对象有属性使用了这些类型,你还可以随时改变这些值以影响动画效果。
View类也提供了新的API用于支持新的动画框架,使你可以很容易的在activity布局中使用2D和3D变换,并且为在布局文件中定义位置,方向,透明度等对象属性提供了可能。
更多信息请参考Property Animation文档。
启用硬件加速
现在通过在配置文件的<application>或<activity>元素中设置android:hardwareAccelerated=”true”可以为你的应用程序使用OpenGL渲染器,硬件加速的好处就是使动画、滚动更加平滑,提高了用户接口的性能和响应速度。当启用硬件加速时,请确认你的程序在支持硬件加速的设备上做过完整的测试。
增强的窗口小部件
窗口小部件允许用户在Home界面直接从你的应用程序中获取信息并且与运行中的服务(例如预览邮件或控制音乐播放)交互。Android 3.0通过集合创建的ListView,GridView和新增的StackView的方式增强了窗口小部件的功能,这些小部件允许你进行更多的交互,例如使用滚动列表,可以通过RemoteViewsService自动的更新数据。
另外,可以使用小部件为应用程序创建预览图(在Android 3.0 AVD中已经内置)并通过android:previewImage进行引用,这样用户就可以看到之前加入到主屏幕中的应用程序预览。
增加其他新特性
Android 3.0增加了很多有价值的新的API,例如拖放API,新的蓝牙API,系统级的剪贴板框架,被称为渲染脚本的新的图像引擎等等,更多信息,请参见Android 3.0 Platform文档。
为超大屏幕发布应用
你需要决定你的应用程序是只为平板类型的设备(典型的是超大(xlarge)设备)开发还是为所有种类的屏幕大小开发。
如果你想对所有屏幕尺寸有效(例如为所有手机和平板设备),那什么也不用做,默认的,应用程序将android:minSdkVersion设为4或者更高,就会自动调整大小以适应屏幕尺寸。
如果你的应用仅为超大屏幕设计,可以在<supports-screens>中仅支持超大屏幕,而将其他的设成false,例如:
<manifest ... >
...
<supports-screens android:smallScreens="false"
android:normalScreens="false"
android:largeScreens="false"
android:xlargeScreens="true" />
<application ... >
...
<application>
</manifest>
使用这样的声明,就指定了你的应用只支持超大屏幕的设备,像Android Market这样的外部服务会使用这一信息从不是超大屏幕的设备中过滤你的应用。
参考示例代码
很多新的特性不仅在Android 3.0 Platform是进行了描述,而且为了帮助你理解用法还提供了示例代码。获取示例可以使用Android SDK管理器从SDK库中下载(“Samples for SDK API 11”)。下载完后可以在<sdk_root>/samples/android-11/中找到,下面的列表可以帮你快速找到关心的特性:
* HoneyComb Grllery:演示了很多Android 3.0中新的API,包括fragment,Action Bar,拖放,动画。
* Fragments:演示fragment布局,回退栈,状态存储等
* Action Bar:演示Action Bar特性,例如选项卡,图标,活动项等。
* Clipboard:演示使用剪贴板进行复制粘贴操作。
* Drag and Drop:演示使用新的View事件进行拖放操作。
* Multi-choice List:演示如何为ListView和GridView提供多项选择。
* Content Loaders:演示使用新的Loader API异步加载数据。
* Property Animation:使用很多例子应用新的动画API。
* Search View Widget:演示在Action Bar上使用新的搜索控件。
* RenderScript:使用很多不同的应用来演示通过学习渲染脚本进行计算和3D图像处理。