2

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

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

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

4

1 回答 1

1

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

根据这里的文档,

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

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

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

垃圾收集在守护线程中工作。守护线程在后台运行。当对象有资格进行垃圾收集时,即当没有可用的活动引用或内存变得太低时,垃圾收集就会起作用。使用此链接了解如何使用跟踪内存分配以及如何避免频繁的垃圾收集。

于 2013-01-24T05:53:13.403 回答