Android开发优化之——从代码角度进行优化.pdfVIP

Android开发优化之——从代码角度进行优化.pdf

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

Android开发优化之——从代码角度进行优化

通常我们写程序,都是在项目计划的压力下完成的,此时完成的代码可以完成具体业务

逻辑,但是性能不一定是最优化的。一般来说,优秀的程序员在写完代码之后都会不断的对

代码进行重构。重构的好处有很多,其中一点,就是对代码进行优化,提高软件的性能。下

面我们就从几个方面来了解Android开发过程中的代码优化。

1)静态变量引起内存泄露

在代码优化的过程中,我们需要对代码中的静态变量特别留意。静态变量是类相关的变

量,它的生命周期是从这个类被声明,到这个类彻底被垃圾回收器回收才会被销毁。所以,

一般情况下,静态变量从所在的类被使用开始就要一直占用着内存空间,直到程序退出。如

果不注意,静态变量引用了占用大量内存的资源,造成垃圾回收器无法对内存进行回收,就

可能造成内存的浪费。

先来看一段代码,这段代码定义了一个Activity。

1.privatestaticResourcesmResources;

2.

3.@Override

4.

5.protectedvoidonCreate(Bundlestate){

6.

7.super.onCreate(state);

8.

9.if(mResources==null){

10.

11.mResources=this.getResources();

12.

13.}

14.

15.}

16.

这段代码中有一个静态的Resources对象。代码片段mResources=this.getResources()

对Resources对象进行了初始化。这时Resources对象拥有了当前Activity对象的引用,

Activity又引用了整个页面中所有的对象。

如果当前的Activity被重新创建(比如横竖屏切换,默认情况下整个Activity会被重

新创建),由于Resources引用了第一次创建的Activity,就会导致第一次创建的Activity

不能被垃圾回收器回收,从而导致第一次创建的Activity中的所有对象都不能被回收。这

个时候,一部分内存就浪费掉了。

经验分享:

在实际项目中,我们经常会把一些对象的引用加入到集合中,如果这个集合

是静态的话,就需要特别注意了。当不需要某对象时,务必及时把它的引用从

集合中清理掉。或者可以为集合提供一种更新策略,及时更新整个集合,这样

可以保证集合的大小不超过某值,避免内存空间的浪费。

)使用Application的Context

在Android中,ApplicationContext的生命周期和应用的生命周期一样长,而不是取

决于某个Activity的生命周期。如果想保持一个长期生命的对象,并且这个对象需要一个

Context,就可以使用Application对象。可以通过调用Context.getApplicationContext()

方法或者Activity.getApplication()方法来获得Application对象。

依然拿上面的代码作为例子。可以将代码修改成下面的样子。

1.privatestaticResourcesmResources;

2.

3.@Override

4.

5.protectedvoidonCreate(Bundlestate){

6.

7.super.onCreate(state);

8.

9.if(mResources==null){

10.

11.//mResources=this.getResources();

12.

13.mResources=this.getApplication().getResources();

14.

15.}

16.

17.}

18.

在这里将this.getResources()修改为this.getApplication(

文档评论(0)

134****3224 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档