我正在尝试在新线程中加载图像以减少UI线程中的延迟:
public class MyGame extends Activity implements Game, Renderer {
...
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
super.onSurfaceCreated(gl, config);
Thread t = new Thread(new Runnable() {
@Override
public void run() {
if(firstTimeCreate) {
Settings.load(getFileIO());
// Load bitmaps and save to variable Assets.backgroundRegions
Assets.load(this);
firstTimeCreate = false;
} else {
Assets.reload();
}
}
});
t.start();
}
...
}
问题是当我在加载图像时尝试绘制图像时,我只获得白色图像,没有错误信息。这是我用来渲染背景的方法(这个方法在循环中运行)
public void renderBackgrounds() {
if (Assets.backgroundRegions.size() > 0) {
batcher.beginBatch(Assets.backgroundRegions.get(0).texture);
batcher.drawSprite(
Assets.backgroundRegions.get(0).position,
Assets.backgroundRegions.get(0)
);
batcher.endBatch();
} // else { background is not loaded yet }
}
奇怪的是当我按Home键并再次打开我的应用程序时,所有背景图像都会正确显示。就像所有加载的图像都有“白图缓存版本”一样,Android只是在重新创建活动之前不清除缓存,也许,我不知道。
如果我在onSurfaceCreated中删除新的线程实现,如下所示:
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
super.onSurfaceCreated(gl, config);
if(firstTimeCreate) {
Settings.load(getFileIO());
Assets.load(this);
firstTimeCreate = false;
} else {
Assets.reload();
}
}
...然后一切正常,除了UI线程非常滞后。
我已经阅读了一些关于在新线程中加载位图的帖子(例如this和this),他们加载Bitmap并将变量直接分配给View(ImageView),但在我的情况下,我保存了将Bitmap转换为变量并使用OpenGL进行渲染。我不知道这是否是其中一个原因。
我可以考虑:
backgroundRegions
)。