一个Activity 两个SurfaceView 挂起给没法正常刷新绘图

一个Activity 两个SurfaceView 挂起给无法正常刷新绘图
RT,小弟不才,在做一个本地地图的项目,打算用一个surfaceview作为背景地图,另一个surfaceview作为GPS数据绘制一个箭头。

  在实际绘图的时候发现,程序启动的时候没有问题,能够正常绘制前景和背景,可当在按下电源关闭屏幕后,再按下电源键后前景的箭头无法绘制了。

  在按下电源后的处理打断点发现线程是可以重新resume的,并且canvas和bitmap都是可以使用的,可就是绘制不出来,因此在这里求教了。

  以下是代码:
  main.xml

XML code

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/lblComments"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="@string/hello" />

    <FrameLayout 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/lblComments" 
        android:layout_below="@+id/lblComments"
        android:layout_centerHorizontal="true">
        
         <test.framelayout.TestFrameLayoutFrontView 
            android:id="@+id/testframelayoutfrontview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="#00000000">
            
        </test.framelayout.TestFrameLayoutFrontView>
        
        <test.framelayout.TestFrameLayoutBackView 
            android:id="@+id/testframelayoutbackview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
            
        </test.framelayout.TestFrameLayoutBackView>
        
    </FrameLayout>
</RelativeLayout>



activity.java

Java code

package test.framelayout;

import android.app.Activity;
import android.os.Bundle;

public class TestFrameLayoutActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}



前景 surfaceview.java

Java code

package test.framelayout;

import test.framelayout.TestFrameLayoutBackView.DrawThread;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.PorterDuff.Mode;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class TestFrameLayoutFrontView extends SurfaceView implements SurfaceHolder.Callback {
    public SurfaceHolder surfaceHolder;
    public Canvas canvas;
    public Bitmap bitmap;
    public Paint paint;
    public DrawThread drawThread;
    public int x;
    public boolean bStop = false;

    public TestFrameLayoutFrontView(Context context, AttributeSet attrs) {
        super(context, attrs);
        x = 0;
        getHolder().addCallback(this);//注册回调接口
    }
    
    protected void onDraw(Canvas canvas) {//绘制界面的方法
        super.onDraw(canvas);
        x += 10;
        
        canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);
        
        
        //canvas.drawLine(0, 0, x, x, paint);
        if(bitmap != null)
            canvas.drawBitmap(bitmap, x, x, paint);
    }
    
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {//界面变化时调用的方法
        //onDraw(canvas);
    }
    
    public void surfaceCreated(SurfaceHolder holder) {
        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.testpic2);
        paint = new Paint();
        paint.setColor(Color.RED);
        surfaceHolder = getHolder();        
        
        surfaceHolder.setFormat(PixelFormat.TRANSPARENT);
        
        setZOrderOnTop(true);
        
        drawThread = new DrawThread();
        drawThread.start();
    }
    
    public void surfaceDestroyed(SurfaceHolder holder) {
        //drawThread.stop();
        bStop = true;
    }
    
    public class DrawThread extends Thread {
        public DrawThread() {
            
        }
        
        public void run() {
            while(bStop == false) {    
            //while (true){
                try {                
                    //锁定整个画布,在内存要求比较高的情况下,建议参数不要为null
                    canvas = surfaceHolder.lockCanvas();
                    synchronized (surfaceHolder) {
                        onDraw(canvas);//绘制
                        
                    }
                } finally {
                    if(canvas != null) {//并释放锁
                        surfaceHolder.unlockCanvasAndPost(canvas);
                    }
                }
                try {
                    Thread.sleep(500);//睡眠指定毫秒数
                } catch(Exception e) {
                    e.printStackTrace();//打印堆栈信息
                }
            }
        }
    }
    
    
}