解决方案 »

  1.   

    如果我没记错,surfaceview确实可以由非ui线程直接调用类似下面的代码Canvas canvas = null;
    try {
    canvas = m_surfaceHolder.lockCanvas();
    synchronized (m_surfaceHolder) {
    canvas.drawBitmap(......);
    }
    } catch (Exception e) {
    } finally {
    if (canvas != null) {
    m_surfaceHolder.unlockCanvasAndPost(canvas);
    }
    }但是你调用的地方要有类似这种synchronized代码来保证不能有多个线程同时访问canvas
    交替执行是不会清除之前绘制的,所谓每次都画完整的,应该不是楼主担心的问题,我的理解是相反的一件事,比如做个画板,想清除之前的笔迹,但已经有一个背景图,此时最简单的办法是整个view重绘,否则只能通过部分刷新,还要从背景图中取出这一部分来贴上去,会很麻烦