1 调用频繁的方法尽快返回, 减少耗时操作
这种方法有一个特点,那就是由程序员覆盖系统中的方法来实现, 并且不是由程序员显示的调用而是由系统框架调用
在android开发中有一个具体的例子: Adapter的getView()方法
该方法被框架调用,以获得listview中的一个条目. 这个方法在listview初始化或上下滑动listview时会被多次调用
所以该方法要尽快返回一个view对象, 避免一些耗时的操作, 必要时缓存view对象
2 避免创建过多的对象
java是一种自动内存管理的语言,不需要程序员做清理内存的工作.创建的所有对象由GC(垃圾回收)负责清理.
但是GC需要一个后台线程的支持.如果创建的对象过多,会影响效率. 一是创建对象本身就具有动态分配内存的开销,
二是GC线程就会一直执行来清理不再使用的对象,占用较多的CPU资源,这样前台
工作线程占用的CPU资源就会减少, 从而降低效率.
在android开发中的一个典型例子是监听器. 假设有100个按钮, 每个按钮都要设置一个监听器, 有以下两种写法:
写法一:
button1.setOnClickListener(new OnClickListener(){...});
button2.setOnClickListener(new OnClickListener(){...});
button3.setOnClickListener(new OnClickListener(){...});
...
button100.setOnClickListener(new OnClickListener(){...});
写法二:
class ButtonOnclickListener impliments View.OnClickListner{
public void onClick(View view){
...
}
}
ButtonOnclickListener buttonListener = new ButtonOnclickListener();
button1.setOnClickListener(buttonListener);
button2.setOnClickListener(buttonListener);
button3.setOnClickListener(buttonListener);
...
button100.setOnClickListener(buttonListener);
很明显, 第二种写法更好,因为第二种方法只创建了1个监听器对象而第一种写法创建了100个不同的对象
以下是根据android官方文档上的一篇文章整理的,文章地址http://developer.android.com/training/best-performance.html
1 尽量使用静态方法
对象的主要作用是封装数据,类中的成员方法用于访问这些数据(属性), 如果没有数据需要封装时, 最好使用静态方法替换成员方法.
成员方法是以虚方法(Virtual)的方式调用,会有更多的性能开销
静态方法都是非虚方法,调用机制比较简单直接,比成员方法的调用提升15% ~ 20%的性能
此外,静态方法不会依赖于对象的状态, 也不会改变对象的状态
2 把常量定义成static final的
如果定义成以下方式
class Demo {
static int intVal = 42;
static String strVal = "Hello world";
...
}
有两个方面开销比较大:
1 编译器会为这两个静态变量的初始化生成一个名称为<clinit>的方法, 即有初始化的开销
2 以后对这两个变量的访问也会有一定的开销, 即访问开销
如果定义成以下方式
class Demo {
static final int intVal = 42;
static final String strVal = "Hello world";
...
}
编译器发现是常量, 那么就不会创建两个变量存储42和"Hello world"这两个值, 既然没有变量, 也就不涉及变量的初始化
也就没有初始化的开销
当这两个常量以后被访问时, 编译器发现是对常量的访问,直接将常量替换成对42和"Hello world"这两个值, 也就不会有变量的访问开销
3 避免使用get和set方法
在对象中, 使用get和set方法访问属性会带来很好的封装性, 避免对象中的数据被破坏.
在C++等原生语言中get和set方法不会带来很大的性能开销, 因为C++等语言会将get和set方法内联(inline),这样就没有方法调用的开销
但在java语言中,get和set方法是成员方法, 是虚方法, 虚方法的调用开销比较大
在android等嵌入式设备上, cpu运算速度较低, 可以取消get和set方法, 直接访问成员变量
在android上, 直接访问成员变量的速度比使用get方法访问块4~7倍
4 使用增强for循环遍历集合或数组
增强for循环(for-each)可以用来遍历实现Iterable接口的集合, 也可以遍历数组
在某些情况下, 比普通for循环快3倍
5 将内部类的访问权限设置成包访问权限而不是private
public class Foo {
private class Inner {
void stuff() {
Foo.this.doStuff(Foo.this.mValue);
}
}
}
public class Foo {
/*package*/class Inner {
void stuff() {
Foo.this.doStuff(Foo.this.mValue);
}
}
}
6 尽量避免使用浮点数
在android设备上, 浮点运算比整型运算慢2倍
相关推荐
Android应用性能优化 开发优秀的Android应用必备指南
【Android性能优化】是Android开发中的重要环节,涵盖了多个关键领域,包括ANR问题解析、crash监控方案、启动速度与执行效率优化、内存优化、耗电优化、网络传输与数据存储优化以及APK大小优化。 **ANR问题解析**是...
以下是Android开发中的性能优化知识点: 1. 高效使用内存:应用生命周期的大部分时间都用于处理内存中的数据。尽可能使用少的内存,不仅是为了减少OutOfMemoryError异常,也是为了提升性能。 2. 数据类型的选择:...
《Android应用性能优化》这本书是Android开发者不可或缺的参考资料,它深入浅出地讲解了如何提升Android应用程序的性能和用户体验。虽然出版时间可能较早,但其中的许多优化原则和技术仍然是当前Android开发中的核心...
根据提供的文件信息,“Android应用性能优化.pdf”这一文档主要聚焦于Android应用的性能优化方法与实践。虽然部分内容涉及社群推广信息,并未直接提供具体的性能优化技术细节,但我们可以通过标题及描述推断出文档的...
根据提供的标题“《Android应用性能优化》.(埃尔韦)”及描述“《Android应用性能优化》.(埃尔韦)”,我们可以推断这本书主要讲述了Android应用程序的性能优化技术与实践。接下来,我们将详细探讨Android应用性能优化...
在Android应用开发中,性能优化是一项至关重要的任务,它直接影响到用户的体验和应用程序的市场竞争力。"Android应用性能优化最佳实践"这本书深入探讨了如何提升Android应用的性能,以下是一些核心知识点的总结: 1...
本篇文章将根据给定的文件内容,深入探讨Android开发中的关键技巧与性能优化方法。 #### 二、Android开发与普通Java开发的区别 在进行Android应用开发时,开发者不仅需要掌握Java编程语言的基础知识,还需要了解...
在Android应用开发中,性能优化是一项至关重要的任务,它直接影响到用户的体验和应用的市场竞争力。本文将深入探讨一些Android应用性能优化的最佳实践,主要基于Java编程语言。 1. **内存管理** - **避免内存泄漏*...
众所周知,移动开发已经来到了后半场,为了能够在众多开发者中脱颖而出,我们需要对某一个领域有深入地研究与心得,对于Android开发者来说,目前,有几个好的细分领域值得我们去建立自己的技术壁垒,如下所示: ...
标题《Android应用程序性能优化》指向了在移动开发领域一个极为重要的议题,即如何提升Android应用的性能。随着智能手机功能的日益强大,用户对应用的响应速度、流畅度和资源消耗的要求也越来越高。因此,开发者必须...
android界面及代码优化方案,帮助提升android应用的性能
基于Android应用的性能优化是Android开发中一个非常重要的方面。Android应用的性能优化可以从多个方面入手,其中包括卡顿优化、ANR优化、内存优化和电量优化等。 一、卡顿优化 卡顿优化是Android性能优化中一个...
【Android应用开发中ListView组件性能优化的研究】 在Android应用开发中,ListView是常见的用于展示大量数据的组件,但在处理大量数据时,如果不进行性能优化,可能会导致应用出现卡顿、延迟甚至崩溃。本文主要探讨...
书中不仅对Android应用程序的开发环境和调试方法进行了详细介绍,而且对Android软件开发的一些关键技术和API进行了讲解,包括数据库、定位和地图、图形用户界面、进程间通信以及手机通话等相关内容。《Android应用...
本书非常适合那些已经具备一定Android开发经验的开发者,因为在基础知识之上,书中深入探讨了多个关于性能提升的高级主题。 首先,本书中详细介绍了NDK(Native Development Kit)开发。NDK允许开发者用C或C++编写...
从提供的文件信息中可以提取的知识点非常有限,且主要是关于获取技术书籍资源的信息,关于标题“Android应用开发揭秘pdf”和标签“Android 应用开发”的实质性内容并未提供。但尽管如此,我们可以根据这些有限的信息...