Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SurfaceView:Android 4.0上的出列缓冲区失败_Android_Android Canvas_Live Wallpaper_Runnable_Surfaceholder - Fatal编程技术网

SurfaceView:Android 4.0上的出列缓冲区失败

SurfaceView:Android 4.0上的出列缓冲区失败,android,android-canvas,live-wallpaper,runnable,surfaceholder,Android,Android Canvas,Live Wallpaper,Runnable,Surfaceholder,我正在制作一个实时壁纸,它有一个全高清分辨率的位图,可以缩小到用户手机屏幕的大小。它在安卓2.2和2.3上运行良好,但在4.0上崩溃 编辑: 我使用try/catch将问题缩小了一点,发现它是从run()方法开始的。MacGyver修复程序运行约20秒,淹没以下错误消息,然后崩溃: 05-31 20:01:22.590: E/SurfaceTextureClient(1475): dequeueBuffer failed (No such device) 05-31 20:01:22.590:

我正在制作一个实时壁纸,它有一个全高清分辨率的位图,可以缩小到用户手机屏幕的大小。它在安卓2.2和2.3上运行良好,但在4.0上崩溃

编辑:

我使用try/catch将问题缩小了一点,发现它是从run()方法开始的。MacGyver修复程序运行约20秒,淹没以下错误消息,然后崩溃:

05-31 20:01:22.590: E/SurfaceTextureClient(1475): dequeueBuffer failed (No such device)
05-31 20:01:22.590: E/BaseSurfaceHolder(1475): Exception locking surface
05-31 20:01:22.590: E/BaseSurfaceHolder(1475): java.lang.IllegalArgumentException
05-31 20:01:22.590: E/BaseSurfaceHolder(1475):  at android.view.Surface.lockCanvasNative(Native Method)
05-31 20:01:22.590: E/BaseSurfaceHolder(1475):  at android.view.Surface.lockCanvas(Surface.java:76)
05-31 20:01:22.590: E/BaseSurfaceHolder(1475):  at com.android.internal.view.BaseSurfaceHolder.internalLockCanvas(BaseSurfaceHolder.java:184)
05-31 20:01:22.590: E/BaseSurfaceHolder(1475):  at com.android.internal.view.BaseSurfaceHolder.lockCanvas(BaseSurfaceHolder.java:157)
05-31 20:01:22.590: E/BaseSurfaceHolder(1475):  at com.pelkkala.test.TestWall$TestMachine.run(TestWall.java:255)
05-31 20:01:22.590: E/BaseSurfaceHolder(1475):  at java.lang.Thread.run(Thread.java:856)
05-31 20:01:22.601: E/ERROR(1475): ERROR IN CODE: java.lang.NullPointerException
05-31 20:01:22.621: W/System.err(1475): java.lang.NullPointerException
05-31 20:01:22.621: W/System.err(1475):     at com.pelkkala.test.TestWall$TestMachine.draw(TestWall.java:233)
05-31 20:01:22.636: W/System.err(1475):     at com.pelkkala.test.TestWall$TestMachine.run(TestWall.java:264)
05-31 20:01:22.636: W/System.err(1475):     at java.lang.Thread.run(Thread.java:856)
下面是我的run()方法:

编辑2:


这可能与仿真器有关吗?我现在无法访问安卓4设备,所以这就是我所拥有的。

我仍然不确定安卓4为什么会出现这种情况,但我就是这样解决的

这给我带来了麻烦:

class TestEngine extends Engine implements Runnable {}

所以我把它改成这样:

class TestEngine extend Engine {

    private final Runnable testRunnable = new Runnable() {
        public void run() {
            drawFrame();
        }
    };

    public void drawFrame() {

        //Draw on canvas and unlock
        ...
        mHandler.postDelayed(testRunnable, 1000 / 50);
    }
}
class TestEngine extend Engine {

    private final Runnable testRunnable = new Runnable() {
        public void run() {
            drawFrame();
        }
    };

    public void drawFrame() {

        //Draw on canvas and unlock
        ...
        mHandler.postDelayed(testRunnable, 1000 / 50);
    }
}