【问题标题】:Android app crahes while using list level drawableAndroid 应用程序在使用列表级可绘制对象时崩溃
【发布时间】:2023-03-18 15:01:01
【问题描述】:

我想将imageview 中的图像旋转为 3d 图像。所以我通过使用列表级别drawableimageview 中添加50 个图像。当我在images.xml 中添加 50 张图片时,应用程序崩溃,但如果我添加 12 张图片,它就可以完美运行。我不知道为什么会发生这个错误。我还没有找到任何解决方案。帮助我摆脱这个问题。

images.xml

<level-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:maxLevel="0" android:drawable="@drawable/one"/>
    <item android:maxLevel="1" android:drawable="@drawable/two"/>
    .
    .
    .
    <item android:maxLevel="50" android:drawable="@drawable/fifty"/>
</level-list>

activity.xml

<ImageView
    android:layout_width="match_parent"
    android:layout_height="170dp"
    android:layout_centerVertical="true"
    android:layout_above="@+id/mid"
    android:paddingTop="40dp"
    android:id="@+id/car_icon"
    app:srcCompat="@drawable/images"
    />

Activity.java

        imageView =  findViewById(R.id.car_icon);
        imageView.setImageLevel(x);

        "x varies depends on onTouchEvent from (0 to 50)"

错误日志

2019-03-04 11:02:39.207 8052-8052/revoh.innovations.smap E/AndroidRuntime: 致命异常: main 进程:revoh.innovations.smap,PID:8052 java.lang.OutOfMemoryError:无法分配 12316512 字节分配,3972568 可用字节和 3MB 直到 OOM 在 dalvik.system.VMRuntime.newNonMovableArray(本机方法) 在 android.graphics.BitmapFactory.nativeDecodeAsset(本机方法) 在 android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:620) 在 android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:455) 在 android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1155) 在 android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:720) 在 android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571) 在 android.content.res.Resources.getDrawable(Resources.java:771) 在 android.graphics.drawable.LevelListDrawable.inflateChildElements(LevelListDrawable.java:134) 在 android.graphics.drawable.LevelListDrawable.inflate(LevelListDrawable.java:93) 在 android.graphics.drawable.DrawableInflater.inflateFromXml(DrawableInflater.java:130) 在 android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1227) 在 android.graphics.drawable.Drawable.createFromXml(Drawable.java:1200) 在 android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:715) 在 android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571) 在 android.content.res.Resources.getDrawable(Resources.java:771) 在 android.content.Context.getDrawable(Context.java:525) 在 android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:463) 在 android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:203) 在 android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:191) 在 android.support.v7.content.res.AppCompatResources.getDrawable(AppCompatResources.java:102) 在 android.support.v7.widget.AppCompatImageHelper.loadFromAttributes(AppCompatImageHelper.java:59) 在 android.support.v7.widget.AppCompatImageView.(AppCompatImageView.java:78) 在 android.support.v7.widget.AppCompatImageView.(AppCompatImageView.java:68) 在 android.support.v7.app.AppCompatViewInflater.createImageView(AppCompatViewInflater.java:182) 在 android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:106) 在 android.support.v7.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1266) 在 android.support.v7.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1316) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:769) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:858) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:518) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:426) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:377) 在 android.support.v7.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469) 在 android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 在 revoh.innovations.smap.MainActivity.onCreate(MainActivity.java:32) 在 android.app.Activity.performCreate(Activity.java:6679) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 在 android.app.ActivityThread.-wrap12(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6119) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 2019-03-04 11:02:39.207 8052-8052/revoh.innovations.smap E/AndroidRuntime: 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

【问题讨论】:

  • 错误在哪里?添加问题。
  • @Bala,显示崩溃日志
  • 好的,我添加我的崩溃日志
  • 加载 50 张图像需要太多内存,因此会崩溃...尝试减小图像大小,或者加载更少的图像。
  • 谢谢@Rakesh Kumar 我通过减少负载大小解决了这个问题。

标签: android android-drawable


【解决方案1】:

您一次加载太多高分辨率图像。 Android Training docs 建议您先缩放图像,然后再将其显示在 UI 上。作为个人喜好,我依靠诸如GlidePicasso 之类的库来有效地在ImageView 中显示图像,因为您的图像是否会达到内存限制取决于设备并且有很多设备具有很多很多的要求。这些库使您免于头痛。

【讨论】:

  • 谢谢@Shababb Karim
猜你喜欢
  • 2016-12-13
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
相关资源
最近更新 更多