加载新活动时获取OutofMemory异常?

时间:2013-07-30 12:07:06

标签: android android-image

我有一个活动和4个标签活动。在每个标签活动中我有画廊,网格布局,当我从标签活动回到我的主要活动时,我得到outofMemory异常。在我的所有标签活动中我有很多images.I已经从5天开始了。请帮助我。我的logcat是:

07-30 17:28:42.375: I/dalvikvm-heap(18784): Forcing collection of SoftReferences for 16384016-byte allocation
07-30 17:28:42.406: D/dalvikvm(18784): GC_BEFORE_OOM freed 1K, 34% free 40614K/61511K, paused 29ms, total 30ms
07-30 17:28:42.406: 
E/dalvikvm-heap(18784): Out of memory on a 16384016-byte allocation.
07-30 17:28:42.406: I/dalvikvm(18784): "main" prio=5 tid=1 RUNNABLE
07-30 17:28:42.406: I/dalvikvm(18784): 
  | group="main" sCount=0 dsCount=0 obj=0x41f726a0 self=0x41f5f018
07-30 17:28:42.406: I/dalvikvm(18784): 
  | sysTid=18784 nice=0 sched=0/0 cgrp=apps handle=1075198032
07-30 17:28:42.406: I/dalvikvm(18784):  
 | schedstat=( 0 0 0 ) utm=219 stm=55 core=0
07-30 17:28:42.406: I/dalvikvm(18784): 
  at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
07-30 17:28:42.406: I/dalvikvm(18784):   
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:592)
07-30 17:28:42.406: I/dalvikvm(18784):
   at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:445)
07-30 17:28:42.406: I/dalvikvm(18784): 
  at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:781)
07-30 17:28:42.406:
 I/dalvikvm(18784):   at android.content.res.Resources.loadDrawable(Resources.java:1963)
07-30 17:28:42.406: 
I/dalvikvm(18784):   at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
07-30 17:28:42.406: I/dalvikvm(18784):   at android.view.View.<init>(View.java:3419)
07-30 17:28:42.406: I/dalvikvm(18784):   at android.view.View.<init>(View.java:3352)
07-30 17:28:42.406: I/dalvikvm(18784):   at android.view.ViewGroup.<init>(ViewGroup.java:426)
07-30 17:28:42.406: I/dalvikvm(18784):   at android.widget.RelativeLayout.<init>(RelativeLayout.java:184)
07-30 17:28:42.406: I/dalvikvm(18784):   at java.lang.reflect.Constructor.constructNative(Native Method)
07-30 17:28:42.406: I/dalvikvm(18784):   at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
07-30 17:28:42.406: I/dalvikvm(18784):   at android.view.LayoutInflater.createView(LayoutInflater.java:587)
07-30 17:28:42.406: I/dalvikvm(18784):   at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
07-30 17:28:42.406: I/dalvikvm(18784):   at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
07-30 17:28:42.406: I/dalvikvm(18784):   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
07-30 17:28:42.416: I/dalvikvm(18784):   at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
07-30 17:28:42.416: I/dalvikvm(18784):   at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
07-30 17:28:42.416: I/dalvikvm(18784):   at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
07-30 17:28:42.416: I/dalvikvm(18784):   at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:306)
07-30 17:28:42.416: I/dalvikvm(18784):   at android.app.Activity.setContentView(Activity.java:1901)
07-30 17:28:42.416: I/dalvikvm(18784):   at com.inventit.commentu.CommentU_Activity.onCreate(CommentU_Activity.java:182)
07-30 17:28:42.416: I/dalvikvm(18784):   at android.app.Activity.performCreate(Activity.java:5048)
07-30 17:28:42.416: I/dalvikvm(18784):   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
07-30 17:28:42.416: I/dalvikvm(18784):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2052)
07-30 17:28:42.416: I/dalvikvm(18784):   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2113)
07-30 17:28:42.416: I/dalvikvm(18784):   at android.app.ActivityThread.access$700(ActivityThread.java:139)
07-30 17:28:42.416: I/dalvikvm(18784):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1224)
07-30 17:28:42.416: I/dalvikvm(18784):   at android.os.Handler.dispatchMessage(Handler.java:99)
07-30 17:28:42.416: I/dalvikvm(18784):   at android.os.Looper.loop(Looper.java:137)
07-30 17:28:42.416: I/dalvikvm(18784):   at android.app.ActivityThread.main(ActivityThread.java:4918)
07-30 17:28:42.416: I/dalvikvm(18784):   at java.lang.reflect.Method.invokeNative(Native Method)
07-30 17:28:42.416: I/dalvikvm(18784):   at java.lang.reflect.Method.invoke(Method.java:511)
07-30 17:28:42.416: I/dalvikvm(18784):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
07-30 17:28:42.416: I/dalvikvm(18784):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
07-30 17:28:42.416: I/dalvikvm(18784):   at dalvik.system.NativeStart.main(Native Method)
07-30 17:28:42.416: A/libc(18784): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 18784 (ventit.commentu)
07-30 17:28:42.416: A/libc(18784): Fatal signal 11 (SIGSEGV) at 0x007d0000 (code=1), thread 18799 (ventit.commentu)
07-30 17:28:50.154: E/Trace(18971): error opening trace file: No such file or directory (2)
07-30 17:28:50.154: D/ActivityThread(18971): setTargetHeapUtilization:0.25
07-30 17:28:50.154: D/ActivityThread(18971): setTargetHeapIdealFree:8388608
07-30 17:28:50.154: D/ActivityThread(18971): setTargetHeapConcurrentStart:2097152
07-30 17:28:50.294: D/dalvikvm(18971): GC_FOR_ALLOC freed 76K, 23% free 16129K/20931K, paused 16ms, total 17ms
07-30 17:28:50.334: I/dalvikvm-heap(18971): Grow heap (frag case) to 40.043MB for 16384016-byte allocation

提前感谢。

1 个答案:

答案 0 :(得分:0)

查看开发者网站的Managing Bitmap Memory文章。

对于API&lt; = 10:

  

在Android 2.3.3(API级别10)及更低版本上,建议使用recycle()。如果您在应用中显示大量位图数据,则可能会遇到OutOfMemoryError错误。 recycle()方法允许应用程序尽快回收内存。

     

警告:只有在确定不再使用位图时才应使用recycle()。如果您调用recycle()并稍后尝试绘制位图,您将收到错误:“Canvas:尝试使用循环位图”。

     

以下代码段给出了调用recycle()的示例。它使用引用计数(在变量mDisplayRefCount和mCacheRefCount中)来跟踪当前是在显示位图还是在缓存中。当满足这些条件时,代码会回收位图:

     
      
  • mDisplayRefCount和mCacheRefCount的引用计数均为0.
  •   
  • 位图不为空,尚未回收。
  •   

对于API&gt; = 11:

  

Android 3.0(API Level 11)引入了BitmapFactory.Options.inBitmap字段。如果设置了此选项,则采用Options对象的解码方法将在加载内容时尝试重用现有位图。这意味着重用了位图的内存,从而提高了性能,并删除了内存分配和取消分配。