SurfaceView를 이용하여 그래프를 그리려고 합니다.
그래서 일단 DoubleBufferTestActivity.java파일 에서 Thread를 하나 돌려 값을 카운트 하도록 하고

Myview.java(SurfaceView)로 값을 넘기려고 합니다.
일단 Surface로 값을 넘겨 그래프를 그려야 하는데 아래 코딩데로 하면 문제가 있고
Linked Queue를 사용할 경우 Thread 처리에 지연이 많이 생기는 듯 합니다.

일단 DoubleBufferTestActivity.java에서 Frame Layout을 사용하여 Myview.java를 현재 뿌려주고 있고요...
두번째 문제는 그림이 그려지기는 하는데 그래프가 막 깜빡거리는 군요..ㅠㅠ
도데체 무엇이 문제인지 .ㅠ.ㅠ.....

DoubleBufferTestActivity.java 
 package exam.test;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.FrameLayout;
public class DoubleBufferTestActivity extends Activity {
    /** Called when the activity is first created. */
	
	FrameLayout F1;
	private MyView mv;
	
	private NumTest mNumTest;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        
        F1=(FrameLayout)findViewById(R.id.FB);
        mv=new MyView(F1.getContext());
        F1.addView(mv);
        
        mNumTest =new NumTest();
        mNumTest.start();
        
    }
    @Override
	public void onWindowFocusChanged(boolean hasFocus) 
	{
    	mv.GraphViewerInitialize(F1.getWidth(),F1.getHeight());
    	mv.MAX_TimeLine=(float)F1.getWidth();
    	mv.MAX_Y_AXIS=(float)F1.getHeight();       	
    	
	}
    
  //Event Handler
  	Handler handler = new Handler() {
  			@Override
  			public void handleMessage(Message msg) {
  				switch (msg.what) 
  				{
  				case 0: 
  					int[] value = (int[]) msg.obj;						
  					mv.testnum=value[0];
  				break;				
  				}
  			}
  		};
    
   private  class NumTest extends Thread 
   {
	   int [] ResultArray= new int[1];
	   int cnt=0;
	   public NumTest()
	   {
		   
	   }
	   
	   public void run()
	   {
		   while(true)
		   {
			   ResultArray[0]=cnt;
			   cnt++;
			   if(cnt==1024) cnt=0;
			   
			   Message msg = new Message();
				msg.what=0;
				msg.obj = ResultArray;
				handler.sendMessage(msg);
				
				try {
					Thread.sleep(4);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		   }
	   }
   }
    
}


Myview.java(SurfaceView)

 package exam.test;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
public class MyView extends SurfaceView implements Callback {
	Mythread mMythread;
	
	Paint paint = new Paint();	
	
	
	//Value Data
		public float Y_Dot_size=0;
		public float REAL_Y_Axis=0;
		public float BEFORE_Y_Axis=0;
		public float MAX_Y_AXIS=0; //LATOUR Y_AXIS
		
		public float REAL_TimeLine = 0;
		public float BEFORE_TimeLine = 0;
		public float MAX_TimeLine = 0; // LAYOUT X_AXIS
			
		
		
		
		public int testnum=0;
		
		
		// 그리기 관련 설정	
	
		public void GraphViewerInitialize(int SizeX,int SizeY)
	    {
	    	Y_Dot_size=(float)SizeY/(float)1023;
	    }
		
		
		
	public MyView(Context context) 
	{
		super(context);
		SurfaceHolder holder = getHolder();
		holder.addCallback(this);
		
		
		 paint.setColor(Color.RED);
		 paint.setStrokeWidth(2);
		
		mMythread = new Mythread(context, holder);
		// TODO Auto-generated constructor stub
	}
	
	public void surfaceCreated(SurfaceHolder holder) 
	{
		mMythread.start();
		// TODO Auto-generated method stub
	}
	
	public void surfaceChanged(SurfaceHolder holder, int format, int width,	int height) 
	{
		// TODO Auto-generated method stub
	}
	public void surfaceDestroyed(SurfaceHolder holder) 
	{
		// TODO Auto-generated method stub
	}
	
	
	
	class Mythread extends Thread{
		SurfaceHolder mHolder;
		Canvas canvas = null;
		public Mythread(Context context, SurfaceHolder holder)
		{
			mHolder = holder;
		}
		
		public void run()
		{
			while(true){
				
					 canvas = mHolder.lockCanvas();
					 if(REAL_TimeLine==0)canvas.drawColor(Color.WHITE);
					 REAL_Y_Axis = ((float)testnum)*Y_Dot_size;//축소화
					 REAL_Y_Axis=MAX_Y_AXIS-REAL_Y_Axis;//Y 반전
					
					 
					try
					{
						synchronized(mHolder)
						{	
							canvas.drawLine((float)BEFORE_TimeLine,(float)BEFORE_Y_Axis,(float)REAL_TimeLine,(float)REAL_Y_Axis,paint);
						}
					}
					finally
					{
						mHolder.unlockCanvasAndPost(canvas);
					}
					
					
					BEFORE_Y_Axis=REAL_Y_Axis;
					BEFORE_TimeLine=REAL_TimeLine;
					REAL_TimeLine=REAL_TimeLine+(float)1;
					 
					 if(MAX_TimeLine<=REAL_TimeLine)
					 {
						 BEFORE_TimeLine=0;
						 REAL_TimeLine=0;
					 }
					
					
				
					try {
						Thread.sleep(4);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
			}
		}
	}
}


main.xml
 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />
    <FrameLayout
        android:id="@+id/FB"
        android:layout_width="312dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.47" />
</LinearLayout>