如何提高android程序运行效率,程序员在开发过程中应当注 意的一些事项

分享一个项目源码:http://www.itlanbao.com/codes.aspx#1,0



以下主要是对SDK文档中,关于android程序效率部分的讲解翻



译以及个人关于Android+Java的学习总结。


下面主要介绍为了提高android程序运行效率,程序员在开发


过程中应当注意的一些事项。


1 介绍


在程序的开发过程中,为节省系统资源,有两条基本的原则:


(1)开发过程中,你只实现你所需要的功能;


(2) 能避免占用内存时,就一定不要去占用内存;


以下所应注意的事项都是基于这两条原则上的。


也许有些人会提出,基于此原则将很难达到真正目的的优化。


但我们也必须承认,在像开发手机这样的嵌入式设备上,有时


,我们没有其它的选择,为了有一些小的优化,很难开发出高


效的数据结构和算法的。例如,当你把你的想法在 android的


模拟器上来进行实现时,你有可能因为没有注意,写得代码是


以耗尽系统几乎所有内存为代价的.当你把程序上传到真机上


时,此时,你的程序将运行的效率很低,很难达到用户的要求




所以,下面要介绍的一些事项能够,它可以在程序开发中,指


导我们的编码,只有这样,程序才能安全执行,运行效率才能


提高。


避免创建对象


对象的创建都是要占用资源的,如果你在循环程序中创建对象


,由于过多的占用内存,你将定时的启动内容回收机制,从而


降低了运行速度。


所以,当你不需要时,你应该避免创建类实例,给出以下几个


例子作为说明:


尽量避免使用字符串,例如:从JSP或是其他客户端得到某些


信息,其中包含int,Date,String类型,尽早把它们转化为自


己合适的数据类型。


必须使用字符串时,考虑 当字符串不可变化时,使用String


类型;当可变时使用StringBuffer类型。


当需要字符串+时,使用StringBuffer。这些例子大家可以在


“动态对象管理”的DAO实现类中找到。


String s = “aaa” + “bbb”;


上面的语句实际上创建了三个String对象,性能受损。


StringBuffer s= new StringBuffer();


s.append(“aaa”);


s.append(“bbb”);


上面仅仅创建一个对象。


多使用原始的方法


当处理字符串时,应该多的使用像String.indexOf


(),String.lastIndex(),以及与它们同等的方法。


4 Prefer virtual over interface


当你要声明一个HashMap对象时,你可以声明它为一个HashMap


类,或一个Map 类:


Map myMap1 = new HashMap();   HashMap myMap2 = new 


HashMap();


哪一个更好的呢?


在Pc机编程中,你应该更倾向与声明为Map,因为你可以调用


Map中提供的接口来实现更多的功能。但是在手机开发中,通


过此种方法的调用,比直接调用方法多花费一倍多的时间。所


以,当你用HashMap类,而且它满足自己的需要,就不需要用


声明为Map的方法。


5 避免在类内部进行Getters/Setters


在C++语言中,经常使用getters(eg. i=getCount())而不


用局部变量的形式(i=mCount).在C++中这是一个很好的习惯


,因为编译器可以通过内联进入getters。


但是在Android中,此习惯是不好的,因为调用虚拟机的代价


很高,比直接使用局部变量费时的多.所以,在公共的接口中


定义getters、setters是可取的,当时,在类中,你应该直接


通过局部变量来访问。


如:


for (int i = 0; i < this.getCount();i++)


      dumpItem(mItems[i]);


应该写为:


int mCount = this.getCount();


for (int i = 0; i < mCount; i++)


      dumpItems(items[i]);


静态成员优于非静态的
在编写程序过程中,因为静态成员的访问不需要构建类的实例


。例如,QuyuDAOFactory的getDAO()方法,直接从类进行访问


即可。


7精确数据计算时,不要使用float或是double类型
使用int或是long进行精确数据计算,自己管理小数位。


当数目不超过9位时,使用int类型;当数目不超过18位时,使


用long;如果超过了18位,使用BigDecimal(注意它是对象,


不是基本数据类型)。


8避免创建重复对象
Strings= new String("guojun");//永远不要这么干!


Strongs = "guojun";//可以接受的改进


9组合优于继承
当确实需要继承时才采用继承,否则使用类组合来完成。


10接口优于抽象类
两种机制最明显的区别是抽象类容许包含某些方法的实现,而


接口不行。


如:com.zte.resmaster.helpers.AbstractDAOImpl,就是抽


象类,它具有得到数据库连接和清除数据库资源的方法,但是


怎么实现具体的DAO操作必须是其子类实现。


如果设计成抽象类,一旦子类要求继承其他类时就没有办法实


现,因为Java中不能多重继承(extends),但是可以多重实


现(implements)。换句话说就是接口是定义混合类型的理想


选择。


接口允许非层次类型框架的构造。


接口通过封装类方式,能够获得安全、强大的功能。


当然抽象类有另一个优势:改进抽象类比改进接口更加容易。


一旦某个方法的实现发生了变化,仅仅需要更改一个地方;当


新加一个方法时,所有子类都具有了该方法。


11尽量使用内部类
如果该类仅仅在某个调用者使用,那么把它设计成调用者的内


部类。具体的例子,参见:


com.zte.resmaster.system.rescomp.dao.RescompDAOOracle


。不会暴露该内部类,避免滥用而导致的维护问题。


12最小化局部变量的作用域


想要快速提升的可以看一下这个:http://www.itlanbao.com/codes.aspx#1,0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值