我的最后一个问题没有得到解答,所以我正在尝试不同的方法。我将许多纹理(256x256 RGBA888)动态加载到内存中,并在需要时丢弃它们。问题是有时当我将纹理上传到OpenGL
ES 时需要 40-80 毫秒,很少更多。我发现,这个缓慢的时间是在垃圾收集之后。问题是,这GC
有时会阻塞GL
线程(FPS 下降),有时会阻塞纹理加载器线程(OK)。有没有一种好方法可以不允许GC
在GL
线程上发生?
System.gc()
我尝试在每 1、2、3...n 个纹理被解码后调用纹理加载器线程,并且这GC-ing
在GL
线程上有效地删除了,但现在纹理加载速度要慢得多,因为该线程必须等待 GC 完成。使“n”更大可以使加载更快,但GC
在GL
线程上更有可能,因此动画不连贯。
对于在不同线程中解码的位图,是否有某种方法可以GC-ing
在线程上删除?GL
我不在GL
线程上解码/分配任何位图,并且GC-ing
仅在加载新纹理时发生。
编辑:应用程序的目标是 android 3.2 和更新版本,还有手机。这发生在手机(HTC One S - 4.0.3)和平板电脑(Nexus 7 - 4.1、Galaxy Tab 2 10.1 - 3.2 和 4.0、Acer Icona A200 - 4.0)上