Android性能优化
来源:互联网 发布:开发麻将软件多少钱 编辑:程序博客网 时间:2024/05/20 18:46
两个基本原则
1.不要做不必要的事情
2.尽可能的节省内存的使用
直接访问比间接访问要快
Java优化原则:
1.使用本地方法,如String.indexOf()等
2.使用针对性的具体方法类创建比虚的接口定义速度要快
如Map mMap=new HashMap()的速度要比HashMap mMap=new HashMap()慢
3.使用静态代替虚拟,如果方法不需要访问外部对象那么就将方法声明为静态方法
4.改进for循环语法和缓冲对象属性调用
for(int i=0;i<string[].Length;i++)速度要比
int j=string[].Length;for(int i=0;i<j;i++)慢
最好的方法是for(string s:string[])这样访问是最快的,在有JIT的设备上和上面第二种的速度差不多
如果一个全局数组要调用其多次,如
for(){dumpItem(this.mItems[i])},
最好先定义一个局部变量数组如
Item[] items=this.mItems;
for(){dumpItem(items[i])}
5.声明final变量
6.考虑用包访问权限替代私有访问权限(说实在的没怎么看懂,例子就是那个反编译文章里面的那个Foo示例,说那样写内部类不好)
注意避免的事项
1.避免创建不必要的对象
2.避免使用内部的Getters/Setters,意思就是如果在一个类中
private int mvalue;
public int getValue(){return mvalue};
在该类中如果要访问mvalue的值直接访问就行了,不要在自己的类中还用getValue这个方法来获取mvalue的值
3.避免使用枚举类型,在空间和速度方面会有影响
如果使用了用ordinal()方法获取枚举变量的整数值速度回快一些
如int colorRed=Color.RED.ordinal();for(int i=0;i<count;i++){
int val=itemsColor[i].e.ordinal();
if(val==colorRed).......
}
4.避免使用浮点类型
上面的优化方法来自郑萌编著的《Android系统下Java编程详解》,其中加了我的一点理解
Android应用性能优化
1。缓存结果
result=cache.get(n);
if(result==null){
result=computerResult(n);
cache.put(n,result);
}
2.API等级
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB){ API=11
sparseArray.removeAt(1);
}else{
int key=sparseArray.keyAt(1);
sparseArray.remove(key);
}
3.数据结构类型
两个double类型相加要比1个float+1个double速度快,也就是说在进行加减运算的时候,类型相同时可以加快速度和节省语句的
在所有数据类型中,short类型的处理速度是最快的
在多次处理string中,用StringBuild替代string会更好,这在C#中也是一样的
4.页面布局中,尽量减少嵌套的层次,就是说最里面的布局和最外面的布局的层次,下面最深嵌套层次就为3,实际上应该是4,因为在所有的xml最外层还会加上一个FrameLayout,,如果用include引用包含该xml时,在XML最外层加上merge,这样就不会添加FrameLayout这一层
<LinearLayout><RelativeLayout><RelativeLayout></RelativeLayout></RelativeLayout></LinearLayout>
5.可以用SDK的layoutopt工具来分析布局进行优化
6.用ViewStub推迟创建对象
xml中
<ViewStub android:id="@+id/mystubid" android:inflatedId="@+id/myid" android:laout="@layout/mylayout"/>
ViewStub stub=(ViewStub)findViewById(R.id.mystubid);
View inflateView=stub.inflate();
或者
ViewStub view=findViewById(R.id.mystubid);
view.setVisibility(View.VISIBLE);
view=findViewById(R.id.myid);
7.在开发阶段启用StrictMode,来检测网络慢和文件系统访问速度慢等问题缺陷
8.SQL中要么一次性插入,或者用SQLiteStatement或者ContentValues填充数据,并且开启事务
public void insert(){
try{
db.beginTransaction();
SQLiteStatement stmt=db.complieStatement("INSERT INTO cheese VALUES(?,?)");
int i=0;
for(String name:sCheeseNames){
String origin=sCheeseOrignis[i++];
stmt.clearBindings();
stmt.bindString(1,name);//替换第一个问号
stmt.bindString(2,origin);
stmt.executeInsert();
}
}catch(Exception e){}finally{db.endTransaction();}
}
9.时间评估用System.nanoTime()或者Debug.threadCpuTimeNanos();
10.用TraceView工具分析方法调用跟踪
Debug.startMethodTracing("/sdcard/awesometrace.trace");
.....需要跟踪的操作
Debug.stopMethodTracing();
在命令行中如如traceview awesometrace.trace就可以启动Traceview
11.电池
广播接收器默认关闭,在onResume中注册,在onPause中注销
AlarmManager和WakeLock使用
1.Adapter中用ViewHolder静态类,可以优化listview的性能,以前都以为ViewHolder没有多大作用。
android布局优化 :http://blog.csdn.net/banketree/article/details/12506763
android代码优化:http://blog.csdn.net/banketree/article/details/12506427
android数据库优化:http://blog.csdn.net/banketree/article/details/12505391
trinea在开源资料上非常棒,java性能优化、布局优化、网络优化等可以看他的个人网站 http://www.trinea.cn/android/java-android-performance/
Android开发性能优化大总结 http://www.linuxidc.com/Linux/2013-07/87359.htm
- 【Android】android性能优化
- 【Android】Android性能优化
- 【Android】Android性能优化
- 【Android】【性能优化】 Android 性能优化
- Android性能优化---布局优化
- Android性能优化---布局优化
- android 内存优化 性能优化
- android 内存优化 性能优化 .
- Android 性能优化、内存优化
- Android 性能优化、内存优化
- android性能优化--overdraw优化
- android性能优化---数据库优化
- android性能优化--布局优化
- Android 性能优化、内存优化
- android性能优化--overdraw优化
- Android性能优化-布局优化
- Android性能优化-布局优化
- Android性能优化-数据优化
- github 入门
- C++浮点数输出 保留有效数字位数设定
- 算法7-6:图论中的难题
- 表单数据的加密传输
- 面试那些事
- Android性能优化
- STL之list
- C2146 错误
- struts2-系统默认校验器大全
- Hibernate多对一关联映射(单向)
- 英文同样的字号但是第一个字母要比其他字母大
- 彖者言乎象章
- xmu 1003 Sort
- phone app 高通工具使用摘抄