【问题标题】:error inflating class and memory issues错误膨胀类和内存问题
【发布时间】:2013-06-14 18:32:34
【问题描述】:

我有一个应用程序,它有 2 个主要布局并且确实使用了很多图片 (16)。该应用程序运行良好,但似乎在布局之间切换了几次后它崩溃了,我相信这是因为它的内存不足。除了缩小图片之外,我不确定如何解决此问题.. 有什么建议吗?

06-14 14:28:10.543584-616/? E/NotificationService: Ignoring notification with icon==0: Notification(pri=0 contentView=null vibrate=null sound=nullnull defaults=0x0 flags=0x62 kind=[null])
06-14 14:28:15.678  19572-19572/?E/dalvikvm-heap: Out of memory on a 2764816-byte allocation.
06-14 14:28:15.698  19572-19572/?E/dalvikvm: Extra info: Footprint=63559KB, Allowed Footprint=65543KB, Trimmed=7916KB
06-14 14:28:15.718  19572-19572/?E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nick.simplequiz.plus/com.nick.simplequiz.plus.saveImage}: android.view.InflateException: Binary XML file line #403: Error inflating class <unknown>
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2351)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
        at android.app.ActivityThread.access$600(ActivityThread.java:151)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1331)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:155)
        at android.app.ActivityThread.main(ActivityThread.java:5454)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
        at dalvik.system.NativeStart.main(Native Method)
        Caused by: android.view.InflateException: Binary XML file line #403: Error inflating class <unknown>
        at android.view.LayoutInflater.createView(LayoutInflater.java:613)
        at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
        at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
        at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:363)
        at android.app.Activity.setContentView(Activity.java:1912)
        at com.nick.simplequiz.plus.saveImage.onCreate(saveImage.java:33)
        at android.app.Activity.performCreate(Activity.java:5066)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1101)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307)
        ... 11 more
        Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.constructNative(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
        at android.view.LayoutInflater.createView(LayoutInflater.java:587)
        ... 26 more
        Caused by: java.lang.OutOfMemoryError: (Heap Size=65543KB, Allocated=57586KB)
        at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
        at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:626)
        at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:473)
        at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:781)
        at android.content.res.Resources.loadDrawable(Resources.java:1959)
        at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
        at android.widget.ImageView.<init>(ImageView.java:120)
        at android.widget.ImageView.<init>(ImageView.java:110)
        ... 29 more
06-14 14:28:15.728  584-595/?E/EmbeddedLogger: App crashed! Process: com.nick.simplequiz.plus
06-14 14:28:15.728  584-595/?E/EmbeddedLogger: App crashed! Package: com.nick.simplequiz.plus v6 (1.0)
06-14 14:28:15.728  584-595/?E/EmbeddedLogger: Application Label: Name the plane plus!

【问题讨论】:

  • 你找到解决方案了吗?

标签: android class memory


【解决方案1】:

我之前遇到过类似的问题。我相信 问题是由于每次都重新创建位图 你开始活动。这是什么的sn-p 我确实是为了解决这个问题。

    Bitmap d;
    private void setImage(String path){
    if(d != null){
        d.recycle();
    }
    d = BitmapFactory.decodeFile(path);


    if(d != null){
        profilePicture.setImageDrawable(new BitmapDrawable(d));
        }       
    }

【讨论】:

  • 好吧,我有点困惑。我在图像视图中使用 png 图像,所以当我的活动被破坏或暂停时我应该回收它们吗?
  • 啊,我明白了。那么图像来自可绘制资源?如果您能找到一种在创建图像后保存图像的方法,那么您可以回收它们。我认为问题来自重新创建图像。不过我不太确定该怎么做。
  • 是的,所有图像都来自可绘制资源。我是 android/java 编程的新手,我不完全确定位图和 jpeg 图像之间的区别。是更喜欢使用位图图像还是jpeg图像还是没有关系?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 2020-07-29
  • 2018-10-02
相关资源
最近更新 更多