11

在我将 S6 Edge 更新到 Android 6.0.1 之前,我的项目一直在运行。

该应用程序在第二次启动崩溃并出现 OutOfMemory 错误。

该应用程序在目录中包含 2000 多个图像,我正在使用计时器来增加计数器并将它们显示在 imageView 上。当 onFinish()/onPause()/onDestroy() 被调用时,我通过将它们设置为 null 来销毁/取消所有对象,例如计时器、计数器和 imageView。

这就是我将图像获取/打印到 imageView 的方式

int resID = getResources().getIdentifier("animation"+i , "drawable", getPackageName());
    Drawable animationFrame = ContextCompat.getDrawable(this, resID);
    animationView.setImageDrawable(animationFrame);
    i++;

它在首次启动时运行(即使我使用生成的 APK 安装应用程序)。当我从最小化的应用程序中删除应用程序时,应用程序会在 2-3 秒后崩溃。我检查了分配的内存,第一次运行时它是正常的(最多 12MB),而第二次分配的内存是 255MB。

onDestroy() 方法 这包括我初始化的所有变量。我的变量被初始化为私有或没有访问变量。

@Override
protected void onDestroy() {
    super.onDestroy();
    pauseAnimation();
    animationView.setImageDrawable(null);
    animationView = null;
    justAnimation = null;
    buttonSign = null;
    i = 0;
    media.stop();
    media  = null;
    deathRateEU = 0;
    deathRateUK = 0;
    labelNumber = null;
    labelNumberUK = null;
    buttonSign = null;
    loadingEU = null;
    loadingUK = null;

}

Media 是一个初始化为 public 的 MediaPlayer,当 counter(i) 到达一个点时它会播放声音

我将它安装在另一台运行 Android 5.1.3 的设备上(不确定,但它是 5.1 的东西)。

在 Android 6.0.1 上最小化应用程序时是否存在 OutOfMemory 问题的已知错误?

我 100% 确定在我的手机更新到版本 6.0.1 之前/之后没有进行任何更改

第一次启动时的内存监视器
在此处输入图像描述

第二次发射
在此处输入图像描述

笔记:

  1. 如果应用程序已安装在设备上,并且我尝试使用 Android Studio 对其进行编译,则会发生崩溃
  2. 我必须卸载/重新编译才能让应用程序在第一时间运行
  3. 当我尝试在 Genymotion Android 6.0 设备上运行我的项目时遇到同样的错误,但在 Android 5.1 genymotion 虚拟设备上却没有
4

1 回答 1

0

我建议您使用Glide库来有效地加载大图像。
您还可以查看这篇关于如何有效加载位图的文章。

于 2019-01-28T09:23:51.890 回答