我的最后一个问题没有回答,所以我尝试了一种不同的方法。我将很多纹理(256x256 RGBA888)加载到内存中,并在需要时丢弃它们。问题是,有时当我将纹理上传到OpenGL
ES时,需要40-80ms,很少。我弄清楚,这个缓慢的时间是在垃圾收集之后。问题是,GC
有时会阻塞GL
线程(FPS丢弃),有时会阻塞纹理加载器线程(OK)。有没有一种好方法可以在GL
线程上以某种方式不允许GC
发生?OpenGL ES线程垃圾回收
我试过之后调用纹理加载器线程System.gc()
每1,2,3个... N纹理解码,这对GL
线程有效去除GC-ing
,但现在的纹理加载慢得多,因为线程必须等待为GC完成。使“n”更大使得加载更快,但GL
线程上的GC
更可能,因此动荡不稳。
是否有某种方法可以在GL
线程上删除GC-ing
线程以便在不同线程中解码位图?我不解码/分配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)
你正在测试什么版本的机器人? –
@Ali Imran编辑我的帖子,添加设备和Androod版本 – shelll
@Ali Imran这也是我很久以前的问题。它不会解决我目前的问题,因为每个BitmapFactory.decodeStream(...)都会创建一个新的位图,这个位图将在未来的某个时间进行GC编辑。我使用的是类似的方法,但没有“双缓存位图”,最终没有给我带来任何好处。 – shelll