Я понял это;и я думаю, что это хороший урок для изучения.Мой класс выглядел примерно так:
public class Sprite {
private static int mTextureID = -1;
private static boolean mShouldLoadTexture = true;
...
onReder(GL10 gl) {
if (mShouldLoadTexture) {
mTextureID = loadTexture(gl, someBitmap);
mShouldLoadTexture = false;
}
}
}
Другой статический класс содержал список спрайтов
public static class SpriteList {
private static Vector<Sprite> mSprites;
...
}
Разница между тем, когда я запускал его как отладочный, а не просто запускал его из модуля запускана телефоне то, что в пакете все классы static сброшены, тогда как на телефоне запуска не сбрасываются классы static , обязательно.
Итак,когда я впервые запустил его как debug , класс увидит, что ему нужно загрузить текстуру, затем выделит указатель текстуры в объекте GL10 и присвоит его static mTextureID,В этот момент mTextureID содержит действительный указатель текстуры GL.
Теперь я бы завершил отладку, отключился от затмения и запустил модуль запуска на моем телефоне.Поскольку контейнер класса Sprite не был сброшен, mTextureID все еще имел некоторое значение, указывающее на несуществующий идентификатор текстуры GL.Кроме того, mShouldLoadTexture будет оставаться «ложным», что означает, что класс не будет пытаться перезагрузить текстуру из растрового изображения.Таким образом, onRender () попытается использовать указатель на недопустимый идентификатор текстуры и вместо этого отобразит белое поле.
Я упростил сценарий, чтобы сделать его более понятным.Я знаю, что статический контейнер не имеет большого смысла в этом примере, но я подумал, что он иллюстрирует происходящее.Когда я сделал содержащий класс больше не static , все работало так, как должно.