原文:http://kuikui.javaeye.com/blog/256665

最近用 Android开发了几个模块,感觉有点慢,后来好好看了相关优化Android代码的知识,优化之后,感觉快了很多。在这里与大家分享一下,下面只是说 的一些很基础有很重要的知识,你想要编写运行速度很快、 占用内存少的代码可能有点帮助。

概述

There are two basic rules for resource-constrained systems

Don't do work that you don't need to do.

Don't allocate memory if you can avoid it.

All the tips below follow from these two basic tenets.

知识点

1, Avoid Creating Objects。

能不使用包装类就不使用包装类。

尽量使用StringBuffer来处理字符串

尽量使用一维数组代替多维数组

2, Use Native Methods

尽量使用系统提供的接口方法,因为系统提供的接口方法使用C编写的,比自己用Java编写的效率高

3, Prefer Virtual Over Interface

多使用接口的具体实现类。

<1>,Map myMap1 = new HashMap();

<2>,HashMap myMap2 = new HashMap();

两者比较结果:第一种是一向大家 比较推崇的,因为他对以后的维护成本低,但是接口方法的调用比实现类方法的调用更耗时。

4, Prefer Static Over Virtual

多使用静态的方法和属性

5, Avoid Internal Getters/Setters

避免使用C++或C形式的(i=this.getCounter())这样子的代码

6, Cache Field Lookups

访问对象的属性比访问本地变量花费时间多。

Accessing object fields is much slower than accessing local variables.

 Instead of writing:

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

dumpItem(this.mItems[i]);

You should write:

int count = this.mCount;

Item[] items = this.mItems;

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

dumpItems(items[i]);

7, Declare Constants Final

声明一些final类型的常量

static int intVal = 42;

static String strVal = "Hello, world!";

可以写成如下:

static final int intVal = 42;

static final String strVal = "Hello, world!";

8, Use Enhanced For Loop Syntax With Caution

谨慎使用增强的for循环,因为它创建多余临时变量。

public class Foo {

int mSplat;

static Foo mArray[] = new Foo[27];

public static void zero() {

int sum = 0;

for (int i = 0; i < mArray.length; i++) {

sum += mArray[i].mSplat;

}

}

public static void one() {

int sum = 0;

Foo[] localArray = mArray;

int len = localArray.length;

for (int i = 0; i < len; i++) {

sum += localArray[i].mSplat;

}

}

public static void two() {

int sum = 0;

for (Foo a: mArray) {

sum += a.mSplat;

}

}

}

zero()返回两次静态字段、每次 循环的时候都要请求数组的长度

one()将所有的属性存放到本地,避免查找。

two()使用jdk1.5以上版本的增强for循环,这是有编译器拷贝数组的引用和长度到本地这在主循环体会产生额外的本地装载和存储,这跟one()相比,比其运行时间长一小点,同时也比one()多4byte的存储空间u

To summarize all that a bit more clearly: enhanced for loop syntax performs well with arrays, but be cautious when using it with Iterable objects since there is additional object creation.

9, Avoid Enums

避免使用枚举。

10,             Use Package Scope with Inner Classes

建议使 用内部类

public class Foo {

private int mValue;

public void run() {

Inner in = new Inner();

mValue = 27;

in.stuff();

}

private void doStuff(int value) {

System.out.println("Value is " + value);

}

private class Inner {

void stuff() {

Foo.this.doStuff(Foo.this.mValue);

}

}

}

11,             Avoid Float

尽量避免使用float类型

12,             Some Sample Performance Numbers

一些常用操作的占用时间相对比 较:

操作                                                               时间

Add a local variable                                                1

Add a member variable                                                       4

Call String.length()                                                                   5

Call empty static native method                                          5

Call empty static method                                                     12

Call empty virtual method                                                   12.5

Call empty interface method                                             15

Call Iterator:next() on a HashMap                                    165

Call put() on a HashMap                                                         600

Inflate 1 View from XML                                                                22,000

Inflate 1 LinearLayout containing 1 TextView                25,000

Inflate 1 LinearLayout containing 6 View objects         100,000

Inflate 1 LinearLayout containing 6 TextView objects   135,000

Launch an empty activity                                                     3,000,000

这 些时间相对值,值得我们好好的权衡哦,很有帮助。

转载于:https://www.cnblogs.com/huaping-audio/archive/2010/03/22/1691492.html

Android高效编程注意事项相关推荐

  1. Android高效编程的一些知识

    总结自以下文章: http://flysnow.iteye.com/blog/914259 http://blog.csdn.net/biaobiaoqi/article/details/673240 ...

  2. android网络编程及网络超时处理

    android网络编程及网络超时处理 本文是收录的两篇关于这方面的文章 Android超时机制的处理 由于手机端应用的响应,与当时的无线通信网络状况有很大的关联.而通信网络往往具有不稳定,延迟长的特点 ...

  3. 《C++面向对象高效编程(第2版)》——导读

    前言 C++面向对象高效编程(第2版) 面向对象软件开发已逐渐成为开发软件的首选.优秀的面向对象软件开发人员.设计人员.系统架构师对其需求与日俱增.要想成为一名成功的面向对象编程(OOP)人员必须忘却 ...

  4. 专业嵌入式软件开发——全面走向高质高效编程(含DVD光盘1张)

    -- 专业嵌入式软件开发--全面走向高质高效编程(含DVD光盘1张) 李云 编著 ISBN 978-7-121-14783-8 2012年1月出版 定价:108.00元(含DVD光盘1张) 16开 6 ...

  5. Android网络编程

    Android平台有三种网络接口可以使用,他们分别是:java.net.*(标准Java接口).Org.apache接口和Android.net.*(Android网络接口).下面分别介绍这些接口的功 ...

  6. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  7. 【Android】Android网络编程概述

    Android网络编程概述 原文来自:http://blog.csdn.net/kieven2008/article/details/8210737 首先,应该了解的几个问题: 1)Android平台 ...

  8. C#高效编程话题集1(每期10话题)

    C#高效编程话题集1(每期10话题) 2011-03-02 09:02 by 陆敏技, 3364 visits, 网摘, 收藏, 编辑 近来在小组C#快速成长团队 讨论了若干话题,有些感觉不错,特总结 ...

  9. 免费分享:5本安卓开发经典书籍,Android 7编程入门经典(第4版),Android底层驱动分析和移植,底层驱动分析和移植

    1.Android 7编程入门经典(第4版) 使用Android Studio 2  PDF 下载 下载地址: http://www.askwinds.com/r-c/down-info-02/579 ...

最新文章

  1. junit配合catubuter统计单元测试的代码覆盖率
  2. python中一共有多少个关键字-python – 搜索多个关键字的字符串列表
  3. 一些数据库优化经验资料整理
  4. springboot 缓存ehcache的简单使用
  5. ip地址管理系统_门禁监控管理系统项目总结
  6. 图像处理-空间域锐化滤波
  7. 深交所向华谊兄弟发问询函:是否存在对本期业绩“大洗澡”
  8. python给定起始和结束日期,如何得到中间所有日期
  9. Parallels Desktop如何检查Windows系统是否具有EFI/UEFI或 Legacy BIOS固件接口
  10. RN上使用react-native-video视频播放器插件
  11. 【深入理解TcaplusDB技术】详细介绍TDR表
  12. 爬虫---涨跌停股票池信息----(东方财富)
  13. 智慧交通怎样利用科技打造一个“最强大脑”
  14. 【3】SALSA-基于HIC数据辅助组装长读长组装结果
  15. 有公众号的情况下,复用资质快速注册小程序
  16. Houdini图文笔记:VEX知识点小结(一)
  17. linux暂停进程运行的按键组合是,Linux基础命令(五):进程——ps、top、jobs、bg、fg、kill、killall、shutdown...
  18. Vue:push添加数据出现__ob__: Observer
  19. W3C DOM 事件模型(简述)
  20. [oeasy]教您玩转python - 0006 - 自由软件运动和开源运动

热门文章

  1. C语言再学习 -- grep 命令(转)
  2. pat天梯赛L1-051. 打折
  3. QEMU KVM 虚拟机移植之性能提高篇小结(android 虚拟机双系统方案)
  4. Android 插件技术实战总结
  5. Android Studio中引入RecyclerView的v7包
  6. mysql 查询后怎么定位列_MySQL如何定位并优化慢查询sql
  7. 关于QVariant 的学习一点分享
  8. mysql 接口访问_MySQL的数据库访问接口-阿里云开发者社区
  9. Google视角的地理信息科学家
  10. BZOJ-2618-凸多边形-CQOI2006