Android优化系列——代码优化
来源:互联网 发布:gta5ol女性捏脸数据 编辑:程序博客网 时间:2024/06/06 17:04
避免建立对象
- 代码流程优化
在if语句中判断是否创建对象 - 对象声明技巧
在使用Vector时,建议初始化时声明其大小
Vector v = new Vector(40);//orVector v = new Vector(40,25);
- 不要多次声明对象
建议这样的写法:
public class x{ private Vector v; public x(){ v = new Vector(); }}
我们应该尽量避免创建短期的临时对象,越少的对象创建意味着越少的垃圾回收。
优化方法调用
- 使用自身方法,如String.indexOf()
- 使用虚拟优于使用接口
- 使用静态优于使用虚拟
静态方法会被更快的调用,因为它不需要一个虚拟函数导向表。 - 避免使用内在的get,set方法
内部变量可以自己调用,可以不需要通过这两个方法调用 - 建议使用getBytes()
- 避免使用InetAddress.getHostAddress()
它会生成许多中间字符串来返回主机地址 - 避免使用DategramPacket.getSocketAddress()
优化代码变量
- StringBuffer的使用
当需要连接String时,不要这样操作:
String str = "welcome"+"to"+"shenzhen";
应当写成:
StringButter sb = new StringButter(50);sb.append("welcome");sb.append("to");sb.append("shenzhen");
- 声明Final常量
- 避免使用列举类型
public class Foo{ public enum Shrubbery{ GROUND,CRAWLING,HANGING }}
上述代码会转变成一个900字节的class文件(Foo$Shrubbery.class)。当第一次使用时,类的初始化要调用方法去描述列举的每一项,每一个对象都要有它自身的静态空间,整个被储存在一个数组里(一个叫$VALUE的静态数组)。
- 避免使用枚举
- 在访问内部类时,可以将内部类访问的变量和函数声明由私有改为包范围。
优化代码过程
- 慎重使用增强型for循环语句
增强型for循环就是”for-each循环“,特别是和Iterable一起使用时。 - 通过内联类使用包空间
- 避免浮点类型的使用
- 避免在条件判断语句中重复调用函数*
这个是重点,错误演示:
for(int i=0;i<s.length;i++){ char c = s.charAt(i);}
正确形式:
int j = str.length();for(int i=0;i<j;i++){ char c = s.charAt(i);}
提高Cursor查询性能
while(cursor.moveToNext){ String name = cursor.getString(cursor.getColumnIndex(People.Name)); String phoneNo = cursor.getString(cursor.getColumnIndex(People.Number));}
上述代码在查询量一多的时候,运行速度会相当慢。
int nameIndex = cursor.getColumnIndex(People.Name);int numberIndex = cursor.getColumnIndex(People.Number);while(cursor.moveToNaxt){ String name = cursor.getString(nameIndex); String phoneNo = cursor.getString(numberIndex);}
这样经过改造后,查询时运行速度明显提升了。
使用ContentProvider共享数据
可以通过ContentProvider来封装数据的query查询,添加insert,删除delete和更新update,而无须用复杂的SQLite。提高了程序运行效率。
public class NotePadProvider extends ContentProvider{ ... private static class DatabaseHelper extends SQLiteOpenHelper{ DatebaseHelper(Context context){ super(context, DATABASE_NAME, null, DATABASE_VERSION); } @override public void onCteate(SQLiteDatabase db){ db.execSQL(...); } ... } private DatabaseHelper mOpenHelper; @override public boolean onCreate(){ mOpenHelper = new DatabaseHelper(getContext()); return true; } @override public Cursor query(Uri uri, String projection, String selection, String[] selectionArgs, String sortOrder){ ... SQLiteDatabase db = mOpenHelper.getReadableDatabase(); Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, orderBy); c.setNotificationUri(getContext().getContentResolver(), uri); return c; }}
要想开发出高效的ContentProvider存储应用,就要尽可能的减少SQL语句的编写在外部操作,封装成方法,这样有关SQL语言的执行在DatabaseHelper中也被简化和分离出来了,而SQL语句主要是体现在选择表的字段,where这样的条件限定语句,这大大减少了我们日常开发工作量,从而优化了工作。
0 0
- Android优化系列——代码优化
- Android性能优化系列—布局优化
- Android性能优化——代码优化
- Android优化系列——性能优化(资源存储)
- Android性能优化的——Java(Android)代码优化
- 性能优化系列第三篇--Java(Android)代码优化
- Android性能优化系列——VSYNC
- Android优化(二)——代码优化
- android内存优化3—从代码角度进行优化
- Android优化系列——控件优化(ListView 异步加载图片优化,SoftReference)
- [MySQL优化案例]系列 — 分页优化
- [MySQL优化案例]系列 — 分页优化
- Android优化之代码优化
- Android性能优化-代码优化
- Android性能优化系列
- 【Android 性能优化系列】
- Android优化系列
- Android性能优化系列
- [033] 微信公众帐号开发教程第9篇-QQ表情的发送与接收
- 各种加解密算法比较
- hdu 3853 LOOPS 【概率DP】
- [032] 微信公众帐号开发教程第8篇-文本消息中使用网页超链接
- C++ 类 (02)
- Android优化系列——代码优化
- service实现自动更换壁纸
- postgreSQL连接池pgbouncer的使用
- [034] 微信公众帐号开发教程第10篇-解析接口中的消息创建时间CreateTime
- This text field does not specify an inputType or a hint
- [035] 微信公众帐号开发教程第11篇-符号表情的发送(上)
- HashMap,HashTable,ConcurrentHashMap,ConcurrentSkipListMap
- SAT作文Reality television programs
- [036] 微信公众帐号开发教程第12篇-符号表情的发送(下)