2013-12-18 41 views

回答

5

没有您的代码很难说,但我看到这个异常,但只有当我完成加载之前,从预览导航离开。

在我的情况下,它被造成的,因为我从onSurfaceCreated方法启动的AsyncTask关闭,但随后通过它得到的地方,我叫surfaceHolder.lockCanvas()表面已经被摧毁了点时间。

为了避开这个我推翻了onSurfaceDestroyed方法,并有一个全球变化的那类叫做drawOk,像这样:

@Override 
    public void onSurfaceCreated(SurfaceHolder holder) { 
     super.onSurfaceCreated(holder); 
     handler.post(reload); 
     drawOk = true; 
    } 

    @Override 
    public void onSurfaceDestroyed(SurfaceHolder holder) { 
     super.onSurfaceDestroyed(holder); 
     handler.removeCallbacks(reload); 
     drawOk = false; 
    } 

    @Override 
    public void onVisibilityChanged(boolean visible) { 
     super.onVisibilityChanged(visible); 
     if(visible) { 
      handler.post(reload); 
      drawOk = true; 
     } else { 
      handler.removeCallbacks(reload); 
      drawOk = false; 
     } 
    } 

    private void draw() { 

     SurfaceHolder surfaceHolder = getSurfaceHolder(); 
     Canvas canvas = null; 

     if(drawOk) { 
      canvas = surfaceHolder.lockCanvas(); 
      if(canvas != null) { 
           // ... 
      } 
     } 
    } 

有一个surfaceHolder.isCreating(),但不是surfaceHolder.isCreated()。这可能不是正确的做法,但它对我有用。