- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为安卓开发一款游戏。而且我注意到,每当垃圾收集器启动时,游戏都会出现大量延迟。
当 App 第一次运行时,所有的对象都被创建并添加到 arrayLists 中,如下所示:
br1 = ImgLoader.getResizedBitmap(BitmapFactory.decodeResource(
context.getResources(), R.drawable.branchfl, MainActivity.opt),
MainActivity.height / 12, MainActivity.width / 6);
for (int i = 0; i < 10; ++i) {
branches_available.add(new Sprite("Branch", br1, 0, 0));
}
Sprite 对象由一个 Bitmap 和几个允许我修改所述 Bitmap 的方法组成。所以在上面的代码中,我将 10 个 Sprites 存储到一个 ArrayList 中。现在在代码的后面,我需要将所述 Sprite 动态生成到我的关卡中。所以我所做的就是:
if (rand == 1) {
branches_available.get(0).image = bToAdd;
branches_available.get(0).xPos = (screenWidth - treeWid - bToAdd
.getWidth()) + bToAdd.getWidth() / 18;
branches_available.get(0).yPos = 0 - bToAdd.getHeight();
branches_available.get(0).height = bToAdd.getHeight();
branches_available.get(0).width = bToAdd.getWidth();
branches.add(branches_available.get(0));
branches_available.remove(0);
这从第一个数组中取出对象并将其添加到第二个数组中。而在draw方法中,只绘制了第二个arrayList。现在,当对象离开屏幕时,我执行以下操作:
branchesSize = branches.size();
for (int i = 0; i < branchesSize; ++i) {
branches.get(i).move(0, speed);
if (branches.get(i).yPos > screenHeight) {
branches_available.add(branches.get(i));
branches.remove(i);
i--;
branchesSize -= 1;
// System.gc(); // Force Garbage Collection
}
}
因此它们被添加回可用数组,以便在需要时可以在上述方法中再次使用它们。
尽管这样做,我的应用程序仍然存在大量延迟。难道是因为我从数组中删除了对象?
我做错了什么?
谢谢!
最佳答案
尝试使用 HashMap<String,Bitmap>
并对其进行初始化,使您需要的每个图像都有一个键,并将键作为图像名称。然后创建一个函数,您可以在其中使用键请求图像,该函数将在 map 中查找它。如果键处的位图为空,则加载位图并将其设置为键。需要时,您可以使用迭代器迭代散列图。每次加载位图时,通过将新位图的大小添加到成员字段来跟踪映射中所有位图的大小。当所有位图的总大小开始接近你设置的阈值时,找出一种方法来选择这一秒不再需要的位图,并调用bitmap.recycle,将该键处的值设置为null,减去大小从所有位图的总大小中移除位图,并通知垃圾收集器。
这将解决数组列表的一些性能问题,并有助于尽快清理内存。棘手的事情是决定要释放哪些位图,如果您愿意,可以在需要之前预测或知道:哪些位图要进入内存。
绘制 Sprite 时,最简单的方法是知道偏移量和当前 Sprite 。例如,如果您有一个 500x200 的 Sprite ,它的第一行有 5 帧,第二行有 5 帧(所以 5 列 2 行),并且您知道 Sprite 的进度是从左到右的,所以从 ( 0,0) 到 (5,0) 然后向下 1 然后再从左到右 (1,0) 到 (1,5) 然后回到从 (0,0) 开始,然后你可以创建一个简单的函数会给你你所需要的。
在 OpenGL 和 Canvas 中,我能够使用偏移量来计算根据当前帧绘制整个位图的哪一部分,这样我在任何时候都不会在内存中拥有超过 1 个位图副本,即使屏幕上有 100 个对象在使用它。
最后,正如我之前在评论中所说,您将希望尽可能地减小所有 sprite 表的大小。
关于java - Android 游戏垃圾收集滞后替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22135824/
我不完全确定我理解 substitute 的作用,尽管我以前在它的代码中使用过。今天在shiny::exprToFunction中遇到了如下几行代码: function (expr, env = pa
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我最近发现了 crockford 的 Javascript supplant 函数。函数是这样的—— if (!String.prototype.supplant) { String.prot
在我工作的一些项目中,添加了一些具有这种语法的 block : var [code, name] = input.split("/"); console.log(code); console.log(
我对 JavaBeans 模式的憎恨就像一千个太阳的火焰一样燃烧。为什么? 冗长。现在是 2009 年。我不应该为一个属性写 7 LOC。如果他们有事件监听器,请捕获你的帽子。 没有类型安全的引用。没
是否有比 PHP 执行速度更快且具有相同功能集(例如对常见 RDBMS、Curl、Regex 等的支持)的替代品? 用 C 编写网站代码怎么样?效果如何?该平台是否独立并在每台服务器上运行? 最佳答案
我正在开始新项目。客户端界面基于 GWT(和 GXT),我没有说它是预先确定的。但是,我可以选择服务器端,这样我就可以玩得开心,并希望在这个过程中学到一些新东西。一些要求是: 与服务器的交换将通过使用
我目前使用 CentOS 5.6(Ghostscript 8 - ImageMagick-6.2.8) 我正在尝试将 pdf 的第一张图像转换为 jpg 文件。 我知道我当前的设置无法转换压缩的 pd
2021 年更新: 只使用 MathJax;您不应该再支持旧版本的 IE。 我想使用 MathJax 来显示 MathML 方程,但它在 IE 中的性能慢得令人无法接受(是的,我读过使用 Emulat
BinaryFormatter 序列化的 128³ 数组加倍,占用 50 MB 空间。序列化具有两个双字段的 128³ 结构数组需要 150 MB 和超过 20 秒的处理时间。 是否有快速简单的替代方
我发现 $.each 非常慢,如果包含大量各种 jQuery 效果,会给网页带来问题。 我想知道 $.each 是否有一个好的替代方案,例如: $('ul li').each(function() {
我正在编写一个Mac应用程序,它提供类似“测试”的功能。此应用程序(通过与服务器的连接)。基本上,该应用程序将为学生提供一个故事供阅读,然后是一系列问题(也来自服务器),用户可以(尝试)选择正确的答案
我喜欢 WPF,但我讨厌 XAML。 XAML 过于冗长,在 Microsoft 尝试对其进行扩展时出现语法问题(请参阅 StringFormat on Bindings),并且难以导航。 XAML
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足 Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以
有没有类似 SoftwareFx 的 PowerGadgets 的产品?我正在查看支持自动刷新的 powershell 的仪表控件。 最佳答案 检查 ShowUI 模块。 http://showui.
我正在开发一个项目,其中页面需要能够根据服务器的状态保持更新。 我喜欢 websocket,因为它们为我提供了一种从服务器推送消息的方法,但可用性是一个问题。 我需要通用方法在网络服务器和浏览器客户端
我最近一直在使用 openX 自托管广告管理软件,但它太慢了。 目标:我需要能够展示一个广告,获得 10 次点击,然后停用该广告,并且每天都这样做。 问题:当我将 openX 设置为每天 10 次点击
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我正在尝试实现一个简单的类,该类允许用户裁剪用于其个人资料图片的图像。这是一个 Java Web 应用程序。 我做了一些搜索,发现 java.awt 有一个 BufferedImage 类,这看起来(
只是一个关于 JQuery 的简单问题,我一直在使用phonegap 并使用 JQuery 制作了一些应用程序。其中一个运行速度非常慢,所以我一直在努力尽可能地精简它。 我一直在考虑的一个更改是用更小
我是一名优秀的程序员,十分优秀!