Android OpenGL应用程序在几个onDrawFrame调用后崩溃

Android OpenGL应用程序在几个onDrawFrame调用后崩溃,android,opengl-es,Android,Opengl Es,我正在用OpenGLES2.0为android编写一个小应用程序。一切都很顺利,但今天我实现了2D文本绘制。我只是创建普通画布,在上面写下文本,然后我把这个位图作为2D纹理加载并绘制它。这是我用来更改文本值的方法 public void setText(String text){ if(!this.text.equals(text)){ this.text = text; Bitmap bitmap = Bitmap.createBitmap(256, 2

我正在用OpenGLES2.0为android编写一个小应用程序。一切都很顺利,但今天我实现了2D文本绘制。我只是创建普通画布,在上面写下文本,然后我把这个位图作为2D纹理加载并绘制它。这是我用来更改文本值的方法

public void setText(String text){
    if(!this.text.equals(text)){
        this.text = text;
        Bitmap bitmap = Bitmap.createBitmap(256, 256, Bitmap.Config.ARGB_4444);
        Canvas canvas = new Canvas(bitmap);
        bitmap.eraseColor(0);
        Paint textPaint = new Paint();
        textPaint.setTextSize(32);
        textPaint.setAntiAlias(true);
        textPaint.setARGB(0xff, 0x00, 0x00, 0x00);
        textPaint.getTextBounds(text, 0, text.length(), bounds);
        canvas.drawText(text, 0, bounds.height(), textPaint);
        GLES20.glDeleteTextures(1, new int[]{textureHandle}, 0);
        this.setTexture(bitmap);
        bitmap.recycle();
    }
}
我想尝试一下,所以我开始计算onDrawFrame调用的数量。它工作得很好,但在第1045次呼叫时,它会冻结,然后再继续几个帧,然后应用程序就崩溃了

我得出结论,这可能是因为缺少可用内存,所以我添加了GLES20.glDeleteTextures(1,newint[]{textureHandle},0);从内存中释放不必要的纹理,但它没有改变任何东西

你知道哪里有问题吗

感谢Toneks

如果setText()由与OpenGL ES代码其余部分不同的线程调用,那么这就是问题所在。所有对OpenGL ES的调用都必须通过Android上的单个线程进行。本文对此进行了详细介绍:

如果setText()由与OpenGL ES代码其余部分不同的线程调用,那么这就是问题所在。所有对OpenGL ES的调用都必须通过Android上的单个线程进行。本文对此进行了详细介绍: