使用列表级可绘制对象时,Android应用崩溃了

时间:2019-03-04 04:29:03

标签: android android-drawable

我想将imageview中的图像旋转为3d图像。因此,我使用列表级别imageviewdrawable中添加了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 / Android运行时:致命异常:主要       流程: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)

1 个答案:

答案 0 :(得分:0)

您一次加载太多高分辨率图像。 Android Training docs建议您先缩放图像,然后再将其显示在UI上。根据个人喜好,我依靠GlidePicasso之类的库来有效显示//Creating Test Data val df = Seq("[2019-01-10T23:59:59.998-06:00] [xx_yyy_zz_sss_ra10] [ERROR] [OSB-473003] [oracle.osb.statistics.statistics] [tid: [ACTIVE].ExecuteThread: '28' for queue: 'weblogic.kernel.Default (self-tuning)'] [userId: <anonymous>] [ecid: 92b39a8b-8234-4d19-9ac7-4908dc79c5ed-0000bd0b,0] [partition-name: DOMAIN] [tenant-name: GLOBAL] Aggregation Server Not Available. Failed to get remote aggregator[[") .toDF("_raw") val splitDF = df.withColumn("split_raw_arr", split($"_raw", " ")) .withColumn("A", $"split_raw_arr"(0)) .withColumn("B", $"split_raw_arr"(1)) .withColumn("C", $"split_raw_arr"(2)) .withColumn("D", $"split_raw_arr"(3)) .withColumn("E", $"split_raw_arr"(4)) .drop("_raw", "split_raw_arr") splitDF.show(false) +-------------------------------+--------------------+-------+------------+----------------------------------+ |A |B |C |D |E | +-------------------------------+--------------------+-------+------------+----------------------------------+ |[2019-01-10T23:59:59.998-06:00]|[xx_yyy_zz_sss_ra10]|[ERROR]|[OSB-473003]|[oracle.osb.statistics.statistics]| +-------------------------------+--------------------+-------+------------+----------------------------------+ val extractedDF = df .withColumn("a", regexp_extract($"_raw", "\\[(.*?)\\]",1)) .withColumn("b", regexp_extract($"_raw", "\\[(.*?)\\] \\[(.*?)\\]",2)) .withColumn("c", regexp_extract($"_raw", "\\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\]",3)) .withColumn("d", regexp_extract($"_raw", "\\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\]",4)) .withColumn("e", regexp_extract($"_raw", "\\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\]",5)) .withColumn("f", regexp_extract($"_raw", "(?<=ecid: )(.*?)(?=,)",1)) .drop("_raw") +-----------------------------+------------------+-----+----------+--------------------------------+---------------------------------------------+ |a |b |c |d |e |f | +-----------------------------+------------------+-----+----------+--------------------------------+---------------------------------------------+ |2019-01-10T23:59:59.998-06:00|xx_yyy_zz_sss_ra10|ERROR|OSB-473003|oracle.osb.statistics.statistics|92b39a8b-8234-4d19-9ac7-4908dc79c5ed-0000bd0b| +-----------------------------+------------------+-----+----------+--------------------------------+---------------------------------------------+ 中的图像,因为您的图像是否会达到内存限制取决于设备本身。有很多要求很多的设备。这些库使您免于头痛。