gpt4 book ai didi

java - 如何在不耗尽内存或使用非常小的图像的情况下加载多个 AnimationDrawables?

转载 作者:行者123 更新时间:2023-11-30 03:33:56 25 4
gpt4 key购买 nike

我现在正在编写一个应用程序,它使用占据大部分屏幕的四个主要按钮。每个都有三个动画:一个 12 帧的介绍动画、一个 33 帧的循环动画和一个基于当前帧关闭循环的动画。

图像高度在 250 250 到 450 250 左右。在应用程序加载时加载所有这些已证明不仅会导致初始加载缓慢,还会导致可用内存较小的设备出现内存不足异常。

问题是,当我尝试加载动画而不预加载它们时,它会在加载之前跳过并挂起一秒钟。此外,我注意到,即使只是在每次点击监听器需要 Activity 动画时运行 Activity 动画,内存使用量似乎也在 20mb 到 40mb 堆大小之间。

我并没有真正做任何奇怪的事情来实现它们。我用的是标准

AnimationDrawable animation = (AnimationDrawable)getResources().getDrawable(R.drawable.blah);
imageView.setImageDrawable(animation);
animation start;

但是在没有预加载的情况下根据需要加载单个动画会造成轻微的延迟。有没有办法预加载它们(如果这有意义的话)或根据我如何在代码中实现它们做其他事情?我目前正致力于将动画分成不同的部分,因此唯一改变的帧是动画对象的实际部分。

除此之外,我还能如何处理 AnimationDrawable 和内存?动画似乎是 Android 的基础,必须有更好、更专业的方式来处理动画资源,这样它们才不会破坏内存库并且仍然流畅。请让我知道我这样做很愚蠢。我应该使用不同的动画类,还是应该根据计时器手动将更改分配给动画 View 以便我一次加载一个?

我想这是一个有点麻烦的问题 - 似乎必须有一种处理此类问题的标准方法。帧数少?不同格式的图像? (jpg 和 png 是一样的)

最佳答案

你可以做几件事来最小化内存消耗。

  • 将图像调整为精确的按钮大小。你不需要更大的形象
  • 将图像调整为屏幕分辨率。如果你的屏幕很小没有理由加载更大的图像。
  • 按照 android 设计指南提供各种分辨率的图像。
  • 保持大部分图像修复,只加载/更改动画部分

避免碰撞

  • 在将图像加载到内存之前检查总堆内存大小 link
  • 确保垃圾回收工作正常。位图垃圾回收与常规垃圾回收略有不同,并且取决于 Android 版本。
  • 尝试 Java 引用资料。

关于java - 如何在不耗尽内存或使用非常小的图像的情况下加载多个 AnimationDrawables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16932268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com