前言:这个严重的错误会导致Android设备被锁定(无法按下Home/Back按钮,需要硬复位)。它与OpenGL曲面和音频回放相关联。Logcat重复某件事情,以达到
W/SharedBufferStack( 398): waitForCondition(LockCondition) timed out (identity=9, status=0). CPU may be pegged. trying again.每秒钟一次,因此这个错误的名字。造成这种情况的根本原因可能是缓冲数据(无论是声音还是图形)时出现死锁。
在华硕EEE变压器平板电脑上测试我的应用程序时,我偶尔会遇到这个错误。当声音线程使用MediaPlayer填充MediaPlayer.create(context, R.raw.someid);对象,而GLSurface线程使用位图加载纹理时,就会发生崩溃。
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),
R.drawable.textureMap,opts);
gl.glGenTextures(1, texAtlas, 0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, texAtlas[0]);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
bitmap.recycle();我不认为原因是音频,因为音频实际上仍然播放(加载音频的线程,然后在x时间后播放它)。如果是这样的话,原因在于使用上述代码的OpenGL ES缓冲。
相关材料
AudioTrack对象。然而,我没有在我的应用程序中使用这个。公共元素
我的问题很简单。这个问题有什么解决办法吗?如果你不能阻止它,是否有一种方法来优雅地失败,防止整个设备被砖?
发布于 2012-03-16 06:45:45
增加设备的虚拟内存会降低发生此问题的次数。当然,这不是一个选项,除非您是设备的制造商。
https://stackoverflow.com/questions/8458404
复制相似问题