`
kevinffk
  • 浏览: 34678 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于android应用开发中性能优化的一些建议

 
阅读更多

 

 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应用必备指南

    Android性能优化.pdf

    【Android性能优化】是Android开发中的重要环节,涵盖了多个关键领域,包括ANR问题解析、crash监控方案、启动速度与执行效率优化、内存优化、耗电优化、网络传输与数据存储优化以及APK大小优化。 **ANR问题解析**是...

    Android开发的性能优化.pdf

    以下是Android开发中的性能优化知识点: 1. 高效使用内存:应用生命周期的大部分时间都用于处理内存中的数据。尽可能使用少的内存,不仅是为了减少OutOfMemoryError异常,也是为了提升性能。 2. 数据类型的选择:...

    《Android应用性能优化》

    《Android应用性能优化》这本书是Android开发者不可或缺的参考资料,它深入浅出地讲解了如何提升Android应用程序的性能和用户体验。虽然出版时间可能较早,但其中的许多优化原则和技术仍然是当前Android开发中的核心...

    Android应用性能优化.pdf

    根据提供的文件信息,“Android应用性能优化.pdf”这一文档主要聚焦于Android应用的性能优化方法与实践。虽然部分内容涉及社群推广信息,并未直接提供具体的性能优化技术细节,但我们可以通过标题及描述推断出文档的...

    《Android应用性能优化》.(埃尔韦)

    根据提供的标题“《Android应用性能优化》.(埃尔韦)”及描述“《Android应用性能优化》.(埃尔韦)”,我们可以推断这本书主要讲述了Android应用程序的性能优化技术与实践。接下来,我们将详细探讨Android应用性能优化...

    android应用性能优化最佳实践读书笔记

    在Android应用开发中,性能优化是一项至关重要的任务,它直接影响到用户的体验和应用程序的市场竞争力。"Android应用性能优化最佳实践"这本书深入探讨了如何提升Android应用的性能,以下是一些核心知识点的总结: 1...

    android开发技巧与性能优化

    本篇文章将根据给定的文件内容,深入探讨Android开发中的关键技巧与性能优化方法。 #### 二、Android开发与普通Java开发的区别 在进行Android应用开发时,开发者不仅需要掌握Java编程语言的基础知识,还需要了解...

    android应用性能优化最佳实践

    在Android应用开发中,性能优化是一项至关重要的任务,它直接影响到用户的体验和应用的市场竞争力。本文将深入探讨一些Android应用性能优化的最佳实践,主要基于Java编程语言。 1. **内存管理** - **避免内存泄漏*...

    Android性能优化学习手册

    众所周知,移动开发已经来到了后半场,为了能够在众多开发者中脱颖而出,我们需要对某一个领域有深入地研究与心得,对于Android开发者来说,目前,有几个好的细分领域值得我们去建立自己的技术壁垒,如下所示: ...

    Android应用程序性能优化

    标题《Android应用程序性能优化》指向了在移动开发领域一个极为重要的议题,即如何提升Android应用的性能。随着智能手机功能的日益强大,用户对应用的响应速度、流畅度和资源消耗的要求也越来越高。因此,开发者必须...

    android性能优化

    android界面及代码优化方案,帮助提升android应用的性能

    基于Android应用的性能优化.pdf

    基于Android应用的性能优化是Android开发中一个非常重要的方面。Android应用的性能优化可以从多个方面入手,其中包括卡顿优化、ANR优化、内存优化和电量优化等。 一、卡顿优化 卡顿优化是Android性能优化中一个...

    Android应用开发中ListView组件性能优化的研究.pdf

    【Android应用开发中ListView组件性能优化的研究】 在Android应用开发中,ListView是常见的用于展示大量数据的组件,但在处理大量数据时,如果不进行性能优化,可能会导致应用出现卡顿、延迟甚至崩溃。本文主要探讨...

    Android应用开发,完整扫描版

    书中不仅对Android应用程序的开发环境和调试方法进行了详细介绍,而且对Android软件开发的一些关键技术和API进行了讲解,包括数据库、定位和地图、图形用户界面、进程间通信以及手机通话等相关内容。《Android应用...

    Android 性能优化

    本书非常适合那些已经具备一定Android开发经验的开发者,因为在基础知识之上,书中深入探讨了多个关于性能提升的高级主题。 首先,本书中详细介绍了NDK(Native Development Kit)开发。NDK允许开发者用C或C++编写...

    Android应用开发揭秘pdf

    从提供的文件信息中可以提取的知识点非常有限,且主要是关于获取技术书籍资源的信息,关于标题“Android应用开发揭秘pdf”和标签“Android 应用开发”的实质性内容并未提供。但尽管如此,我们可以根据这些有限的信息...

Global site tag (gtag.js) - Google Analytics