Android减少内存占用专题.doc

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android减少内存占用专题

Android减少内存占用专题 Android开发经验:不要动不动就分配内存 2011-03-21 开发Andorid应用的开发者都知道,要尽量减少new关键字的使用,因为在手机上GC释放一次内存是一件恐怖的事情,如果你查看一下调试记录,你会发现GC释放内存时有时会花上几百毫秒的时间可以想象,如果你开发的是游戏,这时你的FPS会下降到多少。 虽然这个原则大家都知道,我们还是会看到一些开发者会出现类似问题,这又是为什么呢?呵呵,其实这是一些隐式的对象创建在作怪,看看以下代码: 原则1:如果可能,请不要使用可变参数 public void test(Object ... args) { for(Object aObj: args) { } } 当外部调用时: test(1,some string,false); 系统会自动创建一个临时的数组对象类似于 Object[] args=new Object[]{1,some string,false}; 如果该函数经常被调用,则会极大增加GC的压力所以,如果可能,请不要使用可变参数。 原则2:如果可能,请用StringBuilder代替字符串的相加 我们来看一段代码: public void test2() { String tmp = Hello! + some one.; } 系统会将这句翻译成为如下格式: StringBuilder sb = new StringBuilder(); sb.append(Hello!); sb.append(some one); String tmp = sb.toString(); 这本身没有什么问题,但如果是如下就有意思了: public void test2() { String tmp = Hello! + some one.; tmp += you age is + 13; } 这段代码等效于: StringBuilder sb1 = new StringBuilder(); sb1.append(Hello!); sb1.append(some one.); tmp = sb1.toString(); ... StringBuilder sb2 = new StringBuilder(); sb2.append(tmp); sb2.append(your age is ); sb2.append(13); tmp = sb2.toString(); ... 这样是不是悲剧,本来StringBuilder被无意义的重复创建了多次,期间还在数字转换到文本时创建了String所以请直接使用显示的StringBuilder来链接字符串。 原则3:尽量将不变的东东设置为常数,特别是字符串 较有效的办法是,你的代码可以这样来写: public class TestClass { private static final String STR_HELLO = Hello!; private static final String STR_YOU_AGE_IS = you age is ; private static final int PIx100 = (int)(Math.PI*100); } 当然,即使这样做了,后续对文本操作(如整数到文本转换)然是一件费时费力的或,原因是JAVA中,String是只读的,任何String的内容操作均隐含了new关键字。作者在实际工作中只好采取了更笨笨的办法,自己实现了一个GString类来替代常用的文本操作,其原理时使用预分配的字节内存,只在需要时才转换为String对象。 Android进阶:性能优化篇 2011-05-11 一、OutOfMemoryError异常 在使用Gallery控件时,如果载入的图片过多,过大,就很容易出现OutOfMemoryError异常,就是内存溢出。这是因为Android默认分配的内存只有几M,而载入的图片如果是JPG之类的压缩格式,在内存中展开时会占用大量的空间,也就容易内存溢出。这时可以用下面的方法解决: ImageView i = new ImageView(mContext); BitmapFactory.Options options=new BitmapFactory.Options(); options.inSampleSize = 10; //貌似这个options的功能是返回缩略图,10即表示长和宽为原来的1/10,即面积为原来的1/100 //缩略图可以减少内存占用 Bitmap bm = BitmapFactory.decodeFile(lis.get(position)

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档