在android游戏中,您应该为ui线程或游戏线程中的资源分配内存吗

在android游戏中,您应该为ui线程或游戏线程中的资源分配内存吗,android,Android,我问了一个关于这个问题的线索。我想知道,对于一个简单的游戏(基于月球着陆器示例),是否建议阅读ui线程或游戏线程上的android资源文件夹(在res中)。我在月球着陆器中看到,他们在开始游戏循环之前分配资源。然而,如果有很多资源,这就不能很好地扩展。我前面问题的答案是,可以在后台线程上读取位图之类的资源。现在我想知道这是否是正确的做事方式 另一种架构是不时向ui线程发布一个Runnable,然后分配资源 垃圾收集起作用了吗?我不确定GC在哪个线程上运行。但我的猜测是,它在分配对象的线程上运行

我问了一个关于这个问题的线索。我想知道,对于一个简单的游戏(基于月球着陆器示例),是否建议阅读ui线程或游戏线程上的android资源文件夹(在res中)。我在月球着陆器中看到,他们在开始游戏循环之前分配资源。然而,如果有很多资源,这就不能很好地扩展。我前面问题的答案是,可以在后台线程上读取位图之类的资源。现在我想知道这是否是正确的做事方式

另一种架构是不时向ui线程发布一个Runnable,然后分配资源

垃圾收集起作用了吗?我不确定GC在哪个线程上运行。但我的猜测是,它在分配对象的线程上运行

我上一个问题的答案是可以阅读 背景线程上的位图等资源。现在我想知道 这是正确的做事方式

根据文件,

加载大型位图中讨论的BitmapFactory.decode*方法 如果出现以下情况,则不应在主UI线程上执行 源数据是从磁盘或网络位置(实际上是从任何位置)读取的 源(而不是内存)。加载此数据所需的时间为 不可预测且取决于多种因素(阅读速度 来自磁盘或网络、映像大小、CPU功率等)。如果其中一个 这些任务阻塞UI线程,系统将应用程序标记为 无响应,用户可以选择将其关闭(请参阅 为响应性而设计(以获取更多信息)

因此,您可以使用单独的线程在上述条件下加载资源

我认为这取决于你的需求和资源的大小和数量,即使还有其他的事情要考虑。例如,如果您不希望应用程序用户在加载所有资源之前导航到下一个屏幕,那么使用线程可能会有所帮助

垃圾收集在守护进程线程中工作。守护进程线程在后台运行。
当对象符合垃圾收集条件时,即当没有可用的活动引用或内存过低时,垃圾收集开始工作。使用此选项可以了解如何使用跟踪内存分配以及如何避免频繁的垃圾收集。

这是一个很好的答案。基于该文档,您显然应该在后台线程上使用解码位图。另一个链接对于解释java中的GC陷阱(我是C++程序员,所以GC有点不常见,而且习惯了)是很好的。我在此承诺不会在我的游戏线程中分配短寿命对象。我想我也可以在我知道对我来说很方便的时候请求系统执行GC,比如当加载屏幕出现时。谢谢JJPA!