哪个离线百度地图离线包最省内存?

当前位置: →
→ Drawable和Bit地图在内存中哪位高手更省内存
Drawable和Bit地图在内存中哪位高手更省内存
& 作者:佚名 & 来源: 互联网 & 热度:
&收藏到→_→:
摘要: Drawable和Bitmap在内存中谁更省内存今天在网上查找了下相关的资料,确实很少这方面的,不过也找到了一篇,根据这篇也做了相关...
"Drawable和Bit地图在内存中哪位高手更省内存"::
drawable和bitmap在内存中谁更省内存今天在网上查找了下相关的资料,确实很少这方面的,不过也找到了一篇,根据这篇也做了相关测试
发现除了getresources().getdrawable(r.drawable.ic_launcher)这个方法有绝对优势外,此方法可以加载图片到1000张,
array2[i] = bitmapfactory.decodefile(iconpath);//max 222
&array[i] = drawable.createfrompath(iconpath);//max 221
&array[i] = bitmapdrawable.createfrompath(iconpath);//max& 221
读取文件的方法drawable和bitmap都差不多,都是只能到200张左右
用流的方法读取结果,
array[i] = bitmapdrawable.createfromstream(
//&&&&&&&&&& &&& &&& &&& &new fileinputstream(iconpath), iconpath);//max 111
&&&&&&&&&& &&& &
&&&&&&&&&& &&& &
//&&&&&&&&&& &&& &array2[i] = bitmapfactory.decodestream(
//&&&&&&&&&& &&& &&& &&& &new fileinputstream(iconpath));//max 221 ;
我测试的代码如下
package com.lanlong.
import java.io.
import java.io.
import android.app.
import android.graphics.
import android.graphics.
import android.graphics.
import android.graphics.drawable.
import android.graphics.drawable.
import android.os.
import android.os.
import android.util.
public class androdtestactivity extends activity {
&& &int number = 1000;
&&& drawable[]
&& &bitmap [] array2;
&& &public void oncreate(bundle savedinstancestate) {
&& &&& &super.oncreate(savedinstancestate);
&& &&& &setcontentview(r.layout.main);
&& &&& &string iconpath = environment.getexternalstoragedirectory()
&& &&& &&& &&& &+&/vpn/bafangtong/image/weixin.png&;
&& &&& &array = new drawable[number];//bitmapdrawable 一样
&& &&& &array2 = new bitmap[number];
&& &&& &file mfile = new file(iconpath);
&& &&& &log.i(&&,&mfile.exists() = &+mfile.exists());
&&&&&&& for(int i = 0; i & i++)
&&&&&&&&&&& log.e(&&, &测试第& + (i+1) + &张图片&);
//&&&&&&&&&&& array[i] = getresources().getdrawable(r.drawable.ic_launcher);//1000 ok
//&&&&&&&&&&& array2[i] = bitmapfactory.decodefile(iconpath);//max 222
//&&&&&&&&&&& zoomimg(array2[i], 800, 480);
//&&&&&&&&&&& array[i] = drawable.createfrompath(iconpath);//max 221
&&&&&&&&&&& array[i] = bitmapdrawable.createfrompath(iconpath);//max& 221
&&&&&&&&&&& try {
&& &&& &&& &&& &
//&&&&&&&&&& &&& &array[i] = drawable.createfromstream(
//&&&&&&&&&& &&& &&& &&& &new fileinputstream(iconpath), iconpath);//max 111
&&&&&&&&&& &&& &
//&&&&&&&&&& &&& &array[i] = bitmapdrawable.createfromstream(
//&&&&&&&&&& &&& &&& &&& &new fileinputstream(iconpath), iconpath);//max 111
&&&&&&&&&& &&& &
&&&&&&&&&& &&& &
//&&&&&&&&&& &&& &array2[i] = bitmapfactory.decodestream(
//&&&&&&&&&& &&& &&& &&& &new fileinputstream(iconpath));//max 221 ;
&&&&&&&&&& &&& &log.i(&&, &array[&+i+&] = &+array[i]);
&& &&& &&& &} catch (exception e) {
&& &&& &&& &&& &// todo: handle exception
&& &&& &&& &}
&& &public& bitmap zoomimg(bitmap bm, int newwidth ,int newheight){
&&&&&&& // 获得图片的宽高
&&&&&&& int width = bm.getwidth();
&&&&&&& int height = bm.getheight();
&&&&&&& // 计算缩放比例
&&&&&&& float scalewidth = ((float) newwidth) /
&&&&&&& float scaleheight = ((float) newheight) /
&&&&&&& // 取得想要缩放的matrix参数
&&&&& matrix matrix = new matrix();
&&&&&&& matrix.postscale(scalewidth, scaleheight);
&&&&&&& // 得到新的图片
&&&&&&& bitmap newbm = bitmap.createbitmap(bm, 0, 0, width, height, matrix, true);
日志打印信息
08-28 10:15:27.009: e/(11960): 测试第211张图片
08-28 10:15:27.024: e/(11960): 测试第212张图片
08-28 10:15:27.034: e/(11960): 测试第213张图片
08-28 10:15:27.049: e/(11960): 测试第214张图片
08-28 10:15:27.064: e/(11960): 测试第215张图片
08-28 10:15:27.074: e/(11960): 测试第216张图片
08-28 10:15:27.104: e/(11960): 测试第217张图片
08-28 10:15:27.139: e/(11960): 测试第218张图片
08-28 10:15:27.159: e/(11960): 测试第219张图片
08-28 10:15:27.174: e/(11960): 测试第220张图片
08-28 10:15:27.189: e/(11960): 测试第221张图片
08-28 10:15:27.209: e/(11960): 测试第222张图片
08-28 10:15:27.249: i/dalvikvm-heap(11960): clamp target gc heap from 70.389mb to 64.000mb
08-28 10:15:27.249: i/dalvikvm-heap(11960): forcing collection of softreferences for 281616-byte allocation
08-28 10:15:27.314: i/dalvikvm-heap(11960): clamp target gc heap from 70.381mb to 64.000mb
08-28 10:15:27.314: e/dalvikvm-heap(11960): out of memory on a 281616-byte allocation.
08-28 10:15:27.314: i/dalvikvm(11960): &main& prio=5 tid=1 runnable
08-28 10:15:27.314: i/dalvikvm(11960):&& | group=&main& scount=0 dscount=0 obj=0x41f99538 self=0x40b06010
08-28 10:15:27.314: i/dalvikvm(11960):&& | systid=11960 nice=0 sched=0/0 cgrp=apps handle=
08-28 10:15:27.314: i/dalvikvm(11960):&& | schedstat=(
24 ) utm=311 stm=54 core=3
08-28 10:15:27.314: i/dalvikvm(11960):&& at android.graphics.bitmapfactory.nativedecodestream(native method)
08-28 10:15:27.329: i/dalvikvm(11960):&& at android.graphics.bitmapfactory.decodestream(bitmapfactory.java:658)
08-28 10:15:27.329: i/dalvikvm(11960):&& at android.graphics.bitmapfactory.decodefile(bitmapfactory.java:347)
08-28 10:15:27.329: i/dalvikvm(11960):&& at android.graphics.bitmapfactory.decodefile(bitmapfactory.java:430)
08-28 10:15:27.329: i/dalvikvm(11960):&& at com.lanlong.test.androdtestactivity.oncreate(androdtestactivity.java:42)
08-28 10:15:27.329: i/dalvikvm(11960):&& at android.app.activity.performcreate(activity.java:5066)
08-28 10:15:27.354: i/dalvikvm(11960):&& at android.app.instrumentation.callactivityoncreate(instrumentation.java:1101)
08-28 10:15:27.354: i/dalvikvm(11960):&& at android.app.activitythread.performlaunchactivity(activitythread.java:2307)
08-28 10:15:27.354: i/dalvikvm(11960):&& at android.app.activitythread.handlelaunchactivity(activitythread.java:2387)
08-28 10:15:27.354: i/dalvikvm(11960):&& at android.app.activitythread.access$600(activitythread.java:151)
08-28 10:15:27.354: i/dalvikvm(11960):&& at android.app.activitythread$h.handlemessage(activitythread.java:1331)
08-28 10:15:27.354: i/dalvikvm(11960):&& at android.os.handler.dispatchmessage(handler.java:99)
08-28 10:15:27.354: i/dalvikvm(11960):&& at android.os.looper.loop(looper.java:155)
08-28 10:15:27.354: i/dalvikvm(11960):&& at android.app.activitythread.main(activitythread.java:5485)
08-28 10:15:27.354: i/dalvikvm(11960):&& at java.lang.reflect.method.invokenative(native method)
08-28 10:15:27.354: i/dalvikvm(11960):&& at java.lang.reflect.method.invoke(method.java:511)
08-28 10:15:27.354: i/dalvikvm(11960):&& at com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1028)
08-28 10:15:27.354: i/dalvikvm(11960):&& at com.android.internal.os.zygoteinit.main(zygoteinit.java:795)
08-28 10:15:27.354: i/dalvikvm(11960):&& at dalvik.system.nativestart.main(native method)
08-28 10:15:27.354: e/dalvikvm(11960): out of memory: heap size=65571kb, allocated=63680kb, limit=65536kb
08-28 10:15:27.354: e/dalvikvm(11960): extra info: footprint=65571kb, allowed footprint=65571kb, trimmed=0kb
08-28 10:15:27.354: d/skia(11960): --- decoder-&decode returned false
08-28 10:15:27.354: w/dalvikvm(11960): threadid=1: thread exiting with uncaught exception (group=0x41f982d0)
08-28 10:15:27.359: e/androidruntime(11960): fatal exception: main
08-28 10:15:27.359: e/androidruntime(11960): java.lang.outofmemoryerror: (heap size=65571kb, allocated=63680kb)
08-28 10:15:27.359: e/androidruntime(11960): && &at android.graphics.bitmapfactory.nativedecodestream(native method)
08-28 10:15:27.359: e/androidruntime(11960): && &at android.graphics.bitmapfactory.decodestream(bitmapfactory.java:658)
08-28 10:15:27.359: e/androidruntime(11960): && &at android.graphics.bitmapfactory.decodefile(bitmapfactory.java:347)
08-28 10:15:27.359: e/androidruntime(11960): && &at android.graphics.bitmapfactory.decodefile(bitmapfactory.java:430)
08-28 10:15:27.359: e/androidruntime(11960): && &at com.lanlong.test.androdtestactivity.oncreate(androdtestactivity.java:42)
08-28 10:15:27.359: e/androidruntime(11960): && &at android.app.activity.performcreate(activity.java:5066)
08-28 10:15:27.359: e/androidruntime(11960): && &at android.app.instrumentation.callactivityoncreate(instrumentation.java:1101)
08-28 10:15:27.359: e/androidruntime(11960): && &at android.app.activitythread.performlaunchactivity(activitythread.java:2307)
08-28 10:15:27.359: e/androidruntime(11960): && &at android.app.activitythread.handlelaunchactivity(activitythread.java:2387)
08-28 10:15:27.359: e/androidruntime(11960): && &at android.app.activitythread.access$600(activitythread.java:151)
08-28 10:15:27.359: e/androidruntime(11960): && &at android.app.activitythread$h.handlemessage(activitythread.java:1331)
08-28 10:15:27.359: e/androidruntime(11960): && &at android.os.handler.dispatchmessage(handler.java:99)
08-28 10:15:27.359: e/androidruntime(11960): && &at android.os.looper.loop(looper.java:155)
08-28 10:15:27.359: e/androidruntime(11960): && &at android.app.activitythread.main(activitythread.java:5485)
08-28 10:15:27.359: e/androidruntime(11960): && &at java.lang.reflect.method.invokenative(native method)
08-28 10:15:27.359: e/androidruntime(11960): && &at java.lang.reflect.method.invoke(method.java:511)
08-28 10:15:27.359: e/androidruntime(11960): && &at com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1028)
08-28 10:15:27.359: e/androidruntime(11960): && &at com.android.internal.os.zygoteinit.main(zygoteinit.java:795)
08-28 10:15:27.359: e/androidruntime(11960): && &at dalvik.system.nativestart.main(native method)
=======================================================================
下面这个是从网上找到的,地址.cn/s/blog_5fcay5x.html
1,&比较drawable与bitmap占用内存大小
2,&比较bitmapfactory类的decoderesource方法与decodestream方法的效率
好吧,先来看第1个测试!
以下这个是测试加载1000个drawable对象的代码,很简单的,我就不解释了!
publicclassmainextendsactivity
&&&intnumber=
&&&drawable[]
&&&@override
&&&publicvoidoncreate(bundlesavedinstancestate)
&&&&&&super.oncreate(savedinstancestate);
&&&&&&setcontentview(r.layout.main);
&&&&&&&array
bitmapdrawable[number];
&&&&&&&&&&&&&&&&&&&&
&&&&&&&for(int
i = 0; i &&/span&number; i++)
&&&&&&&&&&&log.e(&&,
+ (i+1) + &张图片&);
&&&&&&&&&&&array[i]
=getresources().getdrawable(r.drawable.img);
输出结果:
04-07 21:49:25.248: d/szipinf(7828):initializing inflate state
04-07 21:49:25.398: e/(7828):测试第1张图片
04-07 21:49:25.658: d/dalvikvm(7828):gc_external_alloc freed 48k, 50% free k, external 0k/0k,paused 24ms
04-07 21:49:25.748: e/(7828):测试第2张图片
04-07 21:49:25.748: e/(7828):测试第3张图片
………………
………………
04-.089: e/(7828): 测试第998张图片
04-.089: e/(7828): 测试第999张图片
04-.089: e/(7828): 测试第1000张图片
程序没有报错,正常运行,加载1000个drawable对象没问题。
下面再来看一下加载1000个bitmap对象的代码,同样的,代码很简单的,我就不解释了!
publicclassmainextendsactivity
&&&intnumber=
&&&bitmap bitmap[];
&&&@override
&&&publicvoidoncreate(bundlesavedinstancestate)
&&&&&&super.oncreate(savedinstancestate);
&&&&&&setcontentview(r.layout.main);
&&&&&&bitmap=
newbitmap[number];
&&&&&&for(inti
= 0; i&&/span& number;i++)
&&&&&&&&&&log.e(&&,
+ (i+1) +&张图片&);
&&&&&&&&&&bitmap[i]
=bitmapfactory.decoderesource(getresources(),r.drawable.img);
输出结果:
04-07 22:06:05.344: d/szipinf(7937):initializing inflate state
04-07 22:06:05.374: e/(7937):测试第1张图片
04-07 22:06:05.544: d/dalvikvm(7937):gc_external_alloc freed 51k, 50% free k, external 0k/0k,paused 40ms
04-07 22:06:05.664: e/(7937):测试第2张图片
04-07 22:06:05.774: d/dalvikvm(7937):gc_external_alloc freed 1k, 50% free k, externalk, paused 31ms
04-07 22:06:05.834: e/(7937):测试第3张图片
04-07 22:06:05.934: d/dalvikvm(7937):gc_external_alloc freed &1k, 50% free k, external1k, paused 24ms
04-07 22:06:06.004: e/(7937):测试第4张图片
04-07 22:06:06.124: d/dalvikvm(7937):gc_external_alloc freed &1k, 50% free k, external1k, paused 27ms
04-07 22:06:06.204: e/(7937):测试第5张图片
04-07 22:06:06.315: d/dalvikvm(7937):gc_external_alloc freed &1k, 50% free k, external2k, paused 26ms
04-07 22:06:06.395: e/(7937):测试第6张图片
04-07 22:06:06.495: d/dalvikvm(7937):gc_external_alloc freed &1k, 50% free k, external3k, paused 22ms
04-07 22:06:06.565: e/(7937):测试第7张图片
04-07 22:06:06.665: d/dalvikvm(7937):gc_external_alloc freed &1k, 50% free k, external3k, paused 22ms
04-07 22:06:06.745: e/(7937):测试第8张图片
04-07 22:06:06.845: d/dalvikvm(7937):gc_external_alloc freed 2k, 51% free k, external4k, paused 23ms
04-07 22:06:06.845:e/dalvikvm-heap(7937): 6170724-byte external allocation too largefor this process.
04-07 22:06:06.885:i/dalvikvm-heap(7937): clamp target gc heap from 48.239mb to48.000mb
04-07 22:06:06.885:e/graphicsjni(7937): vm won't let us allocate 6170724bytes
04-07 22:06:06.885: d/dalvikvm(7937):gc_for_malloc freed &1k, 51% free k, external4k, paused 25ms
04-07 22:06:06.885:d/androidruntime(7937): shutting down vm
04-07 22:06:06.885: w/dalvikvm(7937):threadid=1: thread exiting with uncaught exception(group=0x)
04-07 22:06:06.885:e/androidruntime(7937): fatal exception: main
04-07 22:06:06.885:e/androidruntime(7937): java.lang.outofmemoryerror: bitmap sizeexceeds vm budget
04-07 22:06:06.885:e/androidruntime(7937):
& atandroid.graphics.bitmap.nativecreate(nativemethod)
04-07 22:06:06.885:e/androidruntime(7937):
& atandroid.graphics.bitmap.createbitmap(bitmap.java:477)
04-07 22:06:06.885:e/androidruntime(7937):
& atandroid.graphics.bitmap.createbitmap(bitmap.java:444)
04-07 22:06:06.885:e/androidruntime(7937):
& atandroid.graphics.bitmap.createscaledbitmap(bitmap.java:349)
04-07 22:06:06.885:e/androidruntime(7937):
& atandroid.graphics.bitmapfactory.finishdecode(bitmapfactory.java:498)
04-07 22:06:06.885:e/androidruntime(7937):
& atandroid.graphics.bitmapfactory.decodestream(bitmapfactory.java:473)
04-07 22:06:06.885:e/androidruntime(7937):
& atandroid.graphics.bitmapfactory.decoderesourcestream(bitmapfactory.java:336)
04-07 22:06:06.885:e/androidruntime(7937):
& atandroid.graphics.bitmapfactory.decoderesource(bitmapfactory.java:359)
04-07 22:06:06.885:e/androidruntime(7937):
& atandroid.graphics.bitmapfactory.decoderesource(bitmapfactory.java:385)
04-07 22:06:06.885:e/androidruntime(7937):
& atbassy.test.drawable.main.oncreate(main.java:37)
04-07 22:06:06.885:e/androidruntime(7937):
& atandroid.app.instrumentation.callactivityoncreate(instrumentation.java:1047)
04-07 22:06:06.885:e/androidruntime(7937):
& atandroid.app.activitythread.performlaunchactivity(activitythread.java:1722)
04-07 22:06:06.885:e/androidruntime(7937):
& atandroid.app.activitythread.handlelaunchactivity(activitythread.java:1784)
04-07 22:06:06.885:e/androidruntime(7937):
& atandroid.app.activitythread.access$1500(activitythread.java:123)
04-07 22:06:06.885:e/androidruntime(7937):
& atandroid.app.activitythread$h.handlemessage(activitythread.java:939)
04-07 22:06:06.885:e/androidruntime(7937):
& atandroid.os.handler.dispatchmessage(handler.java:99)
04-07 22:06:06.885:e/androidruntime(7937):
& atandroid.os.looper.loop(looper.java:130)
04-07 22:06:06.885:e/androidruntime(7937):
& atandroid.app.activitythread.main(activitythread.java:3835)
04-07 22:06:06.885:e/androidruntime(7937):
& atjava.lang.reflect.method.invokenative(nativemethod)
04-07 22:06:06.885:e/androidruntime(7937):
& atjava.lang.reflect.method.invoke(method.java:507)
04-07 22:06:06.885:e/androidruntime(7937):
& atcom.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:847)
04-07 22:06:06.885:e/androidruntime(7937):
& atcom.android.internal.os.zygoteinit.main(zygoteinit.java:605)
04-07 22:06:06.885:e/androidruntime(7937):
& atdalvik.system.nativestart.main(native method)
看看上面的输出,才加载到第8张图片,程序就报错了“java.lang.outofmemoryerror: bitmap size exceeds vmbudget”。
通过上面的例子,可以看清楚地看出来,使用drawable保存图片对象,占用更小的内存空间。
而使用biamtp对象,则会占用很大内存空间,很容易就出现oom了!
下面我们再来看一个例子,此文来自: 马开东博客
转载请注明出处 网址:
这个也是加载bitmap对象。
只不过,之次不是使用bitmapfactory的decoderesource方法,
而是使用decodestream方法,看代码。
class main
number = 1000;
&&&bitmap bitmap[];
&&&@override
void oncreate(bundlesavedinstancestate)
&&&&&&super.oncreate(savedinstancestate);
&&&&&&setcontentview(r.layout.main);
&&&&&&bitmap
bitmap[number];
i = 0; i &&/span&number; i++)
&&&&&&&&&&log.e(&&,
+ (i+1) + &张图片&);
&&&&&&&&&&bitmap[i]
= bitmapfactory.decodestream(getresources().openrawresource(r.drawable.img));//这里换了方法
输出结果:
04-07 22:16:12.676: e/(8091):测试第561张图片
04-07 22:16:12.756: e/(8091):测试第562张图片
04-07 22:16:12.826: e/(8091):测试第563张图片
04-07 22:16:12.906: e/(8091):测试第564张图片
04-07 22:16:12.906: d/skia(8091):---------- mmap failed for imageref_ashmem size=2744320err=12
04-07 22:16:12.906: e/(8091):测试第565张图片
04-07 22:16:12.906: d/skia(8091):---------- mmap failed for imageref_ashmem size=2744320err=12
04-07 22:16:12.906: e/(8091):测试第566张图片
04-07 22:16:12.916: e/filemap(8091):mmap(0,416798) failed: out of memory
04-07 22:16:12.916: d/filemap(8091):munmap(0x0, 0) failed
04-07 22:16:12.916: w/asset(8091):create map from entry failed
04-07 22:16:12.916:d/androidruntime(8091): shutting down vm
04-07 22:16:12.916: w/dalvikvm(8091):threadid=1: thread exiting with uncaught exception(group=0x)
04-07 22:16:12.936:e/androidruntime(8091): fatal exception: main
04-07 22:16:12.936:e/androidruntime(8091): java.lang.runtimeexception: unable to startactivitycomponentinfo{bassy.test.drawable/bassy.test.drawable.main}:android.content.res.resources$notfoundexception:
fileres/drawable-mdpi/img.png from drawable resource id#0x7f020001
04-07 22:16:12.936:e/androidruntime(8091):
& atandroid.app.activitythread.performlaunchactivity(activitythread.java:1768)
04-07 22:16:12.936:e/androidruntime(8091):
& atandroid.app.activitythread.handlelaunchactivity(activitythread.java:1784)
04-07 22:16:12.936:e/androidruntime(8091):
& atandroid.app.activitythread.access$1500(activitythread.java:123)
04-07 22:16:12.936:e/androidruntime(8091):
& atandroid.app.activitythread$h.handlemessage(activitythread.java:939)
04-07 22:16:12.936:e/androidruntime(8091):
& atandroid.os.handler.dispatchmessage(handler.java:99)
04-07 22:16:12.936:e/androidruntime(8091):
& atandroid.os.looper.loop(looper.java:130)
04-07 22:16:12.936:e/androidruntime(8091):
& atandroid.app.activitythread.main(activitythread.java:3835)
04-07 22:16:12.936:e/androidruntime(8091):
& atjava.lang.reflect.method.invokenative(nativemethod)
04-07 22:16:12.936:e/androidruntime(8091):
& atjava.lang.reflect.method.invoke(method.java:507)
04-07 22:16:12.936:e/androidruntime(8091):
& atcom.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:847)
04-07 22:16:12.936:e/androidruntime(8091):
& atcom.android.internal.os.zygoteinit.main(zygoteinit.java:605)
04-07 22:16:12.936:e/androidruntime(8091):
& atdalvik.system.nativestart.main(native method)
04-07 22:16:12.936:e/androidruntime(8091): caused by:android.content.res.resources$notfoundexception: fileres/drawable-mdpi/img.png from drawable resource id#0x7f020001
04-07 22:16:12.936:e/androidruntime(8091):
& atandroid.content.res.resources.openrawresource(resources.java:860)
04-07 22:16:12.936:e/androidruntime(8091):
& atandroid.content.res.resources.openrawresource(resources.java:836)
04-07 22:16:12.936:e/androidruntime(8091):
& atbassy.test.drawable.main.oncreate(main.java:43)
04-07 22:16:12.936:e/androidruntime(8091):
& atandroid.app.instrumentation.callactivityoncreate(instrumentation.java:1047)
04-07 22:16:12.936:e/androidruntime(8091):
& atandroid.app.activitythread.performlaunchactivity(activitythread.java:1722)
04-07 22:16:12.936:e/androidruntime(8091):
& ... 11more
04-07 22:16:12.936:e/androidruntime(8091): caused by: java.io.filenotfoundexception:res/drawable-mdpi/img.png
04-07 22:16:12.936:e/androidruntime(8091):
& atandroid.content.res.assetmanager.opennonassetnative(nativemethod)
04-07 22:16:12.936:e/androidruntime(8091):
& atandroid.content.res.assetmanager.opennonasset(assetmanager.java:429)
04-07 22:16:12.936:e/androidruntime(8091):
& atandroid.content.res.resources.openrawresource(resources.java:857)
04-07 22:16:12.936:e/androidruntime(8091):
& ... 15more
从上面可以看出,程序在加载到第566张的时候,就出现了oom错误。
不过,跟第2个例子比起来,你会发现,程序可以加载更多的图片。
这说明了使用bitmapfactory的decoderesource方法会占据大量内存,
而使用使用decodestream方法,则占据更小的内存。
从时间上来说,看看日志输出,大概估算了一下加载一张图片所需要的时间,发现,
decoderesource加载图片需要约0.17秒的时间,
而使用decodestream方法,只需要约0.08秒的时间!
这说明了,decodestream无论是时间上还是空间上,都比decoderesource方法更优秀!!
从上面三个例子,可以看出,用第一种方法(即用drawable加载图片)可以加载更加的图片,加载32张图片的时间约为0.01秒!
我试着把drawable的数量调至1000000,程序在运行时,停在了153761张图片里,手机提示,“无响应…”
个人猜测,drawable应该不属于常驻内存的对象,不然的话,不可能不会出现oom的~~
网上关于drawable与bitmap的资料太少,不能深入学习,真是遗憾~
刚才又做了个测试,把第一个例子中的
array[i] =getresources().getdrawable(r.drawable.img);
方法换成了
array[i] =drawable.createfromstream(getresources().openrawresource(r.drawable.img),null);
搜索此文相关文章:此文来自: 马开东博客
网址: 站长QQ
上一篇:没有了
Drawable和Bit地图在内存中哪位高手更省内存_移动开发相关文章
移动开发_总排行榜
移动开发_最新
移动开发_月排行榜
移动开发_周排行榜
移动开发_日排行榜

我要回帖

更多关于 高德地图离线包下载 的文章

 

随机推荐