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


0 0
原创粉丝点击