布局优化
解析布局文件话费的时间取决于布局的复杂性:资源数据越大解析越慢,而更多的类也让布局实例化变慢
优化布局的原则都遵循一点:减少创建对象的数量
1. 使用相对布局代替线性布局或其他布局
2. 合并布局,如果自己布局的顶层元素是一个FrameLayout,可以使用<merge />标签来合并布局
<?xml version="1.0" encoding = "utf-8"?>
<merge xmlns:android="...">
<ImageView />
<TextView />
</merge>
3. 重用布局,使用 <include />
有两个目的:1. 多次使用相同的布局, 2. 布局有一个通用的组成部分,或有部分依赖于设备配置(例如, 屏幕方向纵置或横置)
<span style="font-size:18px;"><include android:id="@+id/new_id2" layout="@layout/my_layout2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/button1"/></span>
注意layout前面是没有android前缀的
当布局包含进来时,还可以覆盖一些布局的参数,根视图的id、布局的参数等等。
4. ViewStub
ViewStub是轻量级且不可见的视图,当需要时,在自己的布局中可以用它来推迟展开布局。
<ViewStub
android:id="@+id/my_view_stub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout="@layout/my_layout2"/>
mViewStub = (ViewStub)this.findViewById(R.id.my_view_stub);
mButton = (Button) this.findViewById(R.id.button1);
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mViewStub.inflate();
}
});
布局工具
布局优化工具,可以使用HierarchyViewer和layoutopt,这两个工具都位于SDK的tools目录下
OpenGL ES的优化
1.扩展,不是所有设备都支持相同的扩展,为特定的设备进行优化时,必须非常小心,因为一台设备上正常的程序,可能无法运行在另一台上。
2. 纹理压缩,使用某种压缩格式去压缩纹理
3. Mipmap,同一张图片256x256,同时也准备它的128x128、64x64、32x32、16x16、8x8、4x4、2x2、1x1图片,在遇到具体的渲染大小时,选择合适尺寸的图片。
4. 多apk,在应用同时支持多个纹理压缩格式的情况下,如果应用包大小超过限制,可以生成多个apk,每个apk对应一套纹理,由应用商店根据手机的类型展示对应的应用包给用户看。
5. 着色,减少着色器的复杂性
6. 减小场景复杂度
7. 消隐
8. 渲染模式,可以使用以下两个值之一调用setRenderMode()设置GLSurfaceView的渲染模式:
RENDERMODE_CONTINOUSLY
RENDERMODE_WHEN_DIRTY
当渲染模式设置为RENDERMODE_WHEN_DIRTY时,只有创建表面时,或当GLSurfaceView.requestRender被调用时才渲染场景