您的位置:首页 > 职场人生

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

2015-09-21 10:58 661 查看
分享一个项目源码: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息