android优化
2016-04-07 13:29
471 查看
android手机的内存和CPU的性能都是有限的,无限制的使用手机的内存,会导致内存溢出。同样过多的占用CPU的资源,会使得手机变得十分卡顿。
本篇文章介绍几种android性能优化的办法。
1,布局优化
主要需要优化布局的层级,布局的层级少了,android系统的绘制过程就会减少,从而可以提高android性能。
首先要删除布局中无用的布局和层级。不要包裹一些没必要的父布局。
LinearLayout和FrameLayout相对于ReleativeLayout来说更简便,能够用简便的实现的,就不要用复杂的。比如需要用到嵌套布局的情况,那就是用RelativeLayout。
RelativeLayout复杂,会导致布局的过程会花更多的CPU时间。
1.1
主要用于布局的重用,重复的布局代码只需要写一次,需要该布局的地方使用include标签。
可以减少布局的层级。比如下面的布局:
它的层级关系如下图:
使用merge标签后
以上的例子证明了使用merge标签可以减少布局的层级关系。
什么时候要可以使用merge?
①子View中没有和父View相关的属性定义。
②多层重复的布局,比如LinearLayout里又嵌套LinarLayout,这个时候就可以使用merge。
merge作为布局的根标签时,inflate时,必须指定一个父ViewGroup,且必须设定attchToRoot的值为true。
1.2 ViewStub的使用
有的布局并不是一定会展示出来,比如无网络的布局,数据为空的布局等。
我们虽然可以手动的设置了它的Visibility为visible和gone,但是现在它在整个界面初始化的时候就已经加载进来了。而ViewStub可以在需要它的时候,在inflate,显示或隐藏。在不需要的时候,它不会参与任何的布局和绘制。
ViewStub的布局,它的layout会关联一个layout布局文件。
注意的是ViewStub当被inflate或setVisibility后,就会显示它内部的布局,同时会被内部的布局替换掉。接下来不可以继续对ViewStub进行其他的操作。
本篇文章介绍几种android性能优化的办法。
1,布局优化
主要需要优化布局的层级,布局的层级少了,android系统的绘制过程就会减少,从而可以提高android性能。
首先要删除布局中无用的布局和层级。不要包裹一些没必要的父布局。
LinearLayout和FrameLayout相对于ReleativeLayout来说更简便,能够用简便的实现的,就不要用复杂的。比如需要用到嵌套布局的情况,那就是用RelativeLayout。
RelativeLayout复杂,会导致布局的过程会花更多的CPU时间。
1.1
<include>标签和
<merge>标签的使用:
主要用于布局的重用,重复的布局代码只需要写一次,需要该布局的地方使用include标签。
可以减少布局的层级。比如下面的布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button style="@style/Botton_Common" android:id="@+id/btn_next" android:text="下一个"/> </LinearLayout>
它的层级关系如下图:
使用merge标签后
<?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button style="@style/Botton_Common" android:id="@+id/btn_next" android:text="下一个"/> </merge>
以上的例子证明了使用merge标签可以减少布局的层级关系。
什么时候要可以使用merge?
①子View中没有和父View相关的属性定义。
②多层重复的布局,比如LinearLayout里又嵌套LinarLayout,这个时候就可以使用merge。
merge作为布局的根标签时,inflate时,必须指定一个父ViewGroup,且必须设定attchToRoot的值为true。
1.2 ViewStub的使用
有的布局并不是一定会展示出来,比如无网络的布局,数据为空的布局等。
我们虽然可以手动的设置了它的Visibility为visible和gone,但是现在它在整个界面初始化的时候就已经加载进来了。而ViewStub可以在需要它的时候,在inflate,显示或隐藏。在不需要的时候,它不会参与任何的布局和绘制。
ViewStub的布局,它的layout会关联一个layout布局文件。
<ViewStub android:id="@+id/viewstub" android:layout_marginRight="@dimen/padding" android:layout_marginLeft="@dimen/padding" android:layout="@layout/image" android:layout_width="match_parent" android:layout_height="wrap_content"/>
//如果要展示ViewStub的布局 ViewStub stub=(ViewStub)findViewById(R.id.viewstub); stub.inflate(); 或 stub.setVisibility(View.Visible);
注意的是ViewStub当被inflate或setVisibility后,就会显示它内部的布局,同时会被内部的布局替换掉。接下来不可以继续对ViewStub进行其他的操作。
相关文章推荐
- Android下如何计算两经纬点之间距离?
- android的下拉框添加数据
- Android Studio 简介
- 关于要使用全局dialog的解决方案
- 安卓开发与分析者的利器--安卓右键工具
- Android自动滚动 轮播循环的ViewPager
- Android出现“Read-only file system”解决办法
- 在android中如何查看sqlite数据表结构,以及data文件打不开问题
- android开发系列之ContentObserver
- android开发--volley的使用
- Android学习——ActivityManager与Proxy模式的运用
- android GMS认证之CTS 常用命令
- Android 最火的快速开发框架XUtils
- Mono For Android调试闪退问题
- 关于android的pan_display
- bug_ _ android.view.InflateException: Binary XML file line #2: Error inflating class <unknown
- android实现自动升级并安装打开
- zz:Android测试提升效率批处理脚本
- Android File(一) 存储以及File操作介绍
- android开发系列之数据存储