开发Android应用 提升性能的小技巧

 

  前  言

 

  2015年,Android OS 目前在手机操作系统的市场占有率已达59%,权威机构预计,Android市场占有率在2016年将达到63%,由于Android的开放性,未来占有率还将不断增加,Android的NDK支持C/C++语言,这就增加了其在物联网智能硬件领域的份额,按照这个趋势,未来必然是Android一统天下;

  那如何才能开发出受欢迎的Android应用呢? 出色的用户体验有三个特征:速度快响应及时无缝。下面的文字可以帮助你在Android上实现这些特点;

 

  速度快

 

  你不能指望手机像桌面系统、服务器一样提速,毕竟移动设备的体积和发热有限制,所以更多的是要关注你的代码是否高效

  编写高效的Android代码,应遵循两个原则:

  1、不做不必要的事;

  2、不分配不必要的内存;

  以下是一些达到此目标的小技巧(有一些技巧是与OOP原则冲突的,请根据工程情况斟酌使用):

1、避免建立对象

  例如,int数组比Integer数组好,同理,这适用于所有基本类型的组合。

2、使用本地方法

  不要吝惜使用String.indexOf(), String.lastIndexOf()等特殊实现的方法(specialty methods)。这些方法都是使用C/C++实现的;

3、使用实现类比接口好

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

  调用一个接口的引用会比调用实体类的引用多花费一倍的时间;

4、不用getter和setter

  应该直接访问变量;

5、将成员变量缓存到本地

for (int i = 0; i< this.mCount; i++)           dumpItem(this.mItems[i]);

  上面的代码最好改成这样:

int count = this.mCount;
Item[] items = this.mItems;
for (int i = 0; i< count; i++) dumpItems(items[i]);

  另外,永远不要在for的第二个条件中调用任何方法

6、给常量加上final

  下面的代码执行时,编译器会生成一个叫做的初始化类的方法,当类第一次被使用的时候这个方法会被执行。方法会将42赋给intVal,然后把一个指向类中常量表的引用赋给strVal。当以后要用到这些值的时候,会在成员变量表中查找到他们。

static int intVal = 42;
static String strVal = “Hello, world!”;

  把上面的代码改成下面这样:

static final int intVal = 42;
static final String strVal = “Hello, world!”;

  这样写,类不再需要方法,因为在成员变量初始化的时候,会将常量直接保存到类文件中。用到intVal的代码被直接替换成42,而使用strVal的会指向一个字符串常量,而不是使用成员变量。

7、谨慎使用foreach

  foreach可以用在实现了Iterable接口的集合类型上。foreach会给这些对象分配一个iterator,然后调用hasNext()和next()方法。你最好使用foreach处理ArrayList对象,但是对其他集合对象,foreach相当于使用 iterator

8、避免使用枚举

  枚举变量非常方便,但不幸的是它会牺牲执行的速度,并大幅增加文件体积

9、将内部类需要访问的外部变量或方法 声明在包的范围内

public class Foo {private int mValue;public void run() {Inner in = new Inner();mValue = 27;in.stuff();}private class Inner {void stuff() {System.out.println(Foo.this.mValue);}}
}

  Foo$Inner是一个完全独立的类,它要直接访问Foo的私有成员是非法的。编译器会自动生成一个方法:

static int Foo.access$100(Foo foo) {return foo.mValue;
}

  内部类在每次访问 mValue() 方法时,都会调用这个静态方法。同理,内部类要访问私有方法也是如此。

10、避免使用浮点数

  嵌入式处理器通常没有支持浮点运算的硬件,所有对 float、double 的运算都是通过软件实现的;

  通过将内部类访问的变量和函数声明由私有范围改为包范围,我们可以避免这个问题。这样做可以让代码运行更快,并且避免产生额外的静态方法。(遗憾的是,这些成员变量和方法可以被同一个包内的其他类直接访问,这与经典的OOP原则相违背。因此当你设计的时候应该谨慎使用这条优化原则)

 

  响 应 及 时

 

1、将耗时工作交到子线程

2、如果你的程序在后台默默的处理用户输入,请给出一个代码正在工作的提示,例如:ProgressBar(进度条) 和 ProgressDialog(进度对话框) 都是响 应 及 时 很好的选择;

3、如果是游戏,把计算步骤放在子线程中;

 

  无 缝

 

1、不要丢失数据,继承onPause()方法;

2、利用ContentProvider来共享数据;

3、不要打断用户,使用通知。

 

以上就是在开发过程中提高应用性能的一些实用小技巧,欢迎补充,谢谢。

 

 

转载于:https://www.cnblogs.com/jackchiang/p/4588955.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server 中使用 Try Catch 处理异常

1 CREATE TABLE ErrorLog(2 errNum INT,3 ErrSev NVARCHAR(1000),4 ErrState INT,5 ErrProc NVARCHAR(1000),6 ErrLine INT,7 ErrMsg NVARCHAR(2000)8 )9 10 CREATE PROCEDURE ProcErrorLog 11 AS 12 BEGIN 13 SELECT 14 ERROR_NUMBER() AS ErrNum,--返回导致运…

Hibernate 对象的三种状态

Hibernate 对象的三种状态 瞬时&#xff08;transient&#xff09;: 由new操作符创建&#xff0c;且尚未与Hibernate Session关联的对象被认定为瞬时&#xff08;Transient&#xff09;的。瞬时&#xff08;Transient&#xff09;对象不会被持久化到数据库中&#xff0c;也不会…

升级Jenkins镜像,支持.NET6.0

&#xff08;寒天催日短&#xff0c;风浪与云平&#xff09;书接上文&#xff0c;上回咱们说到了《【Blog.Core开源】完成升级.NET 6.0》&#xff0c;只是代码层面的升级&#xff0c;今天趁着周末正好把生产环境也升级下&#xff08;大家可以酌情升级哟&#xff09;。过程很简单…

女朋友来大姨妈怎么办?

1 医生的工伤怎么算&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 大风车呀吱悠悠的转&#xff01;&#xff08;via&#xff1a;草多南&#xff09;▼3 买了个丑酸奶&#xff01;▼4 和老爸讨论谈恋爱&#xff08;via&#xff1a;张子乐_&#xff0…

[转]android 获取手机GSM/CDMA信号信息

本文转自&#xff1a;http://software.intel.com/zh-cn/blogs/2011/12/16/android-gsmcdma/ 在Android中我们常用的轻松获取WIFI信号列表&#xff0c;那如何获取CDMA或者GSM的手机信号呢&#xff1f;系统提供了TelephonyManager类&#xff0c;此类非常丰富&#xff0c;基本你所…

数码管流动显示(自己的单片机)

/********************************************************************************** * 标题: 试验数码管上显示数字( 单片机直接实现位选 共阴极) * * * * …

Hibernate懒加载

在Hibernate框架中&#xff0c;当我们要访问的数据量过大时&#xff0c;明显用缓存不太合适&#xff0c; 因为内存容量有限 &#xff0c;为了减少并发量&#xff0c;减少系统资源的消耗&#xff0c;这时Hibernate用懒加载机制来弥补这种缺陷&#xff0c;但是这只是弥补而不是用…

迪拜“烧掉800亿”造了座烂尾岛,奇葩建筑惊呆网友:有钱人的世界,我不懂!

全世界只有3.14 % 的人关注了爆炸吧知识来源&#xff1a;普象工业设计小站天呐&#xff01;最新消息阿布扎比酋长国又发现220亿桶非常规可采石油让原本富有的国家更加钱上有钱尤其是它的兄弟国——迪拜简直“豪”无人性耗资800亿美元的“世界岛”惨成全球最大烂尾项目竟没有表示…

英特尔收购威盛X86业务 兆芯何去何从

日前&#xff0c;英特尔公司以1.25亿美元收购威盛麾下Centaur 公司的x86业务。Centaur 是威盛的一家子公司&#xff0c;20多年前&#xff0c;威盛依靠数笔收购获得了x86授权&#xff0c;开发了数款X86芯片&#xff0c;由于性能与英特尔和AMD差距太大&#xff0c;威盛的X86 CPU在…

.net中的mapinfo开发:准备(一)

最近开发一个项目&#xff0c;用到了mapinfo的开发&#xff0c;所以想把自己研究的一些东西记录下来&#xff0c;一则供自己使用&#xff0c;二则供一些同道中的朋友参考&#xff0c;有什么不当之处&#xff0c;请提示&#xff0c;再做修改。 首先要了解一下mapinfo的基本概念&…

研究生计划-心得征程

以前定过一个计划&#xff0c;现在觉得有必要在重新规划一次&#xff0c;毕竟见识和认识有深了 1、编译原理&#xff0c;前些天是把数据结构写完了&#xff0c;编译原理也一直没看&#xff0c;所以下一步深入学习编译原理 2、学习PHP框架&#xff0c;像wordpress和yii,PHP也算入…

java launcher 下载_Java Launcher下载并安装

通过双击资源管理器中的类文件来运行Java程序&#xff0c;并创建一个EXE和可执行的JAR文件Java启动器通过双击类文件来运行Java应用程序和小程序. 通过右键单击以图形格式查看类源代码和类层次结构&#xff1b;显示jar和zip文件的内容java下载安装&#xff0c;而不是通过右键单…

自带数据线的迷你数显充电宝,好用到哭

▲ 点击查看无论是付钱办事坐车&#xff0c;还是游戏追剧闲聊&#xff0c;有个手机就够了啊~这也就导致了&#xff0c;出门最怕的不是没带钱&#xff0c;而是带了手机却没电了。手机没电&#xff01;这简直能要了老命啊&#xff01;幸好有充电宝“续命”&#xff01;但每回在打…

值得永久收藏的 C# 设计模式套路(二)

设计模式套路&#xff0c;第二弹。在第一篇中&#xff0c;主要写了创造模式相关的几种套路。如果你是刚看到这个文章&#xff0c;建议你先去看看第一篇 传送门。这一篇&#xff0c;我们说说结构模式相关的套路。结构模式&#xff0c;主要作用是将类型、对象和其它内容放在一起&…

VmWare5.5主机Citrix桌面实施方案(二)

三、配置数据库服务器安装数据库服务器分别在三台机器上安装SQL2008运行安装程序图示3.1点击确定继续图示3.2使用全新安装图示3.3图示3.4输入密钥继续图示3.5接受条款图示3.6进行安装图示3.7图示3.8图示3.9图示3.10图示3.11图示3.12图示3.13指定启动SQL账户图示3.14指定管理员图…

sql查询从m到n的这几条记录

查询从m到n的这几条记录 m-ngoselect top (n-m1) * from stu where id not in (select top (m-1) ID from stu ) --51-100select top 50 * from stu where id not in (select top 50 ID from stu )转载于:https://www.cnblogs.com/kuang/archive/2012/07/19/2599344.html

enmu枚举类型

在实际问题中&#xff0c;有些变量的取值被限定在一个有限的范围内。例如&#xff0c;一个星期内只有七天&#xff0c;一年只有十二个月&#xff0c;一个班每周有六门课程等等。如果把这些量说明为整型&#xff0c;字符型或其它类型显然是不妥当的。为此&#xff0c;C语言提供了…

java定义接口_一文知道Java中接口的定义

使用interface来定义一个接口。接口定义同类的定义类似&#xff0c;也是分为接口的声明和接口体&#xff0c;其中接口体由常量定义和方法定义两部分组成。定义接口的基本格式如下&#xff1a;方法&#xff1a;接口中的方法只有定义而没有被实现。1.接口是一组行为的规范、定义&…

告诉你一个可怕的数学事实:公路越多,城市越堵!

全世界只有3.14 % 的人关注了爆炸吧知识生活依旧美好上周&#xff0c;刘强西带着小天到附近的清扬山放松一下。然而&#xff0c;从京西大旅馆有两条路可以到清扬山。一条是金龙大道&#xff0c;前半程走完需要20分钟&#xff0c;但可怕的是路窄&#xff0c;车辆一多就慢&#x…

官方精简版!Windows 10 LTSC 2021 正式发布

微软现已正式发布 Windows 10 企业版 LTSC 2021。LTSC 全称为 the Long-Term Servicing Channel&#xff0c;即长期服务频道。使用 LTSC 服务模型&#xff0c;Windows 10 电脑可以延迟接收功能更新&#xff0c;功能更新每 2-3 年&#xff08;Windows 10 家庭版和专业版等此前为…