【问题标题】:How to remove inflate exceptions ocurring due to out of memory error如何消除因内存不足错误而发生的膨胀异常
【发布时间】:2018-01-04 10:43:22
【问题描述】:

我在 Kids ABCD 应用程序中面临太多崩溃,这也是由于 OUT OF MEMORY ERROR 引起的 Inflate Exceptions。

应用程序在前台运行时占用了太多空间,导致它崩溃。

只有当我们在不同的活动之间切换得如此之快以至于堆区域被如此快速地填满并且应用程序开始给出膨胀异常并最终在活动销毁释放的空间之前崩溃时才会出现此问题。 (Activity 之间的快速切换是为了检查应用程序的性能)。

主要原因可能是大图像或应用程序在缓存后台存储中占用了更多空间。

大尺寸图片不可能是问题,因为我们已经验证所有图片都应该是中等尺寸。我们对代码所做的另一件事是,我们通过调用finish()method 完成了每个意图的每个活动。这里使用finish() 方法,以便活动可以从当前空间释放所有位图(关闭活动)。

super.onCreate(savedInstanceState);
    setContentView(R.layout.ringa_ringa);   

    pause = (ImageView) findViewById(R.id.pause);
    txt = (TextView) findViewById(R.id.txt);
    pause.setVisibility(View.VISIBLE);
    txt.setTextColor(Color.parseColor("#ffffff"));
    list = new ArrayList<>();
    mediaStorageDir = new File(Environment.getExternalStorageDirectory(), "Kids_Rhymes");

    ringa_thread_running = false;



    pause.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (counter == 0) {
                mediaPlayer.stop();
                ringa_thread_running = false;
                position = 0;
                if (lyrics_ring.isAlive()) {
                    lyrics_ring.interrupt();
                }
                pause.setImageResource(R.drawable.play);
                counter = 1;
            } else if (counter == 1) {
                pause.setImageResource(R.drawable.pause);
                counter = 0;
                onResume();
            }
        }
    });

    String[] words = getResources().getString(R.string.ringa).split("\\$");
    for (String w : words) {
        System.out.println("=======String====" + w);
        list.add(w);

    }

试图为此找到准确的解决方案,但没有找到合适的解决方案。

【问题讨论】:

标签: java android


【解决方案1】:

将以下代码放入清单中

 android:largeHeap="true"

喜欢

 <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

【讨论】:

    【解决方案2】:

    如何消除因内存不足错误而发生的膨胀异常

    总体上使用更少的内存,特别是避免重复的大分配。您可以使用 Android Studio 来帮助解决此问题,例如通过生成堆转储来查看内存中不同点的对象。

    大尺寸图片不是问题,因为我们已经验证所有图片都应该是中等尺寸

    请记住,“中等大小”需要根据使用的堆空间来衡量,这比使用的磁盘空间要大得多,因为大多数图像都以压缩形式存储。另外,请记住,可绘制资源会根据设备的屏幕密度和您在资源目录中为资源声明的屏幕密度进行缩放。

    这里使用了finish()方法,以便活动可以从当前空间释放所有位图(关闭活动)。

    首先,销毁 Activity 的时间与启动下一个 Activity 的时间并不完全同步。这里的交互比这更复杂。

    其次,对于您可能再次使用的位图,释放它们并稍后尝试重新分配它们是获得OutOfMemoryErrors 的一种好方法。

    总体而言,有一些书籍和课程涵盖了 Android 内存管理。您可以考虑从这些资源中学习。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-18
      • 2016-09-29
      • 1970-01-01
      • 2019-10-10
      • 2022-01-08
      • 2016-12-08
      • 1970-01-01
      • 2013-10-13
      相关资源
      最近更新 更多