2013-03-21 3 views
0

나는 단지 몇 주 동안 자바를 사용 해왔다. 그리고 나는 무슨 일이 일어나는지 전혀 모른다.Android에서 스레딩. 무엇을 해야할지 모른다. 슈퍼 혼동

저는 캔버스를 만들고 있는데,이 코드를 튜토리얼에서 복사하여 붙여 넣었습니다. 그러나 실제로는 코드를 실제로 설정하는 방법을 모르기 때문에 발생하는 오류가 많습니다. 튜토리얼은 스레딩을하는 방법을 이미 알고있는 사람들을위한 것이며, 나는 길을 잃었다. 오류를 수정하는 방법을 모르겠습니다.

즉 :

postInvalidate()는 안드로이드 기능 ... setWillNotDraw 및 다른 사람과 같은 내장에도 불구하고, 또는 무엇인가 "하는 방법을 밤은."

저는 혼란스럽고 이러한 오류를 수정하는 방법을 모르겠습니다.

package com.example.routedrawingtest; 

import android.graphics.Canvas; 
import android.view.SurfaceHolder; 


class PanelThread extends Thread { 
     private SurfaceHolder _surfaceHolder; 
     private DrawingPanel _panel; 
     private boolean _run = false; 


     public PanelThread(SurfaceHolder surfaceHolder, DrawingPanel panel) { 
      _surfaceHolder = surfaceHolder; 
      _panel = panel; 
     } 


     public void setRunning(boolean run) { //Allow us to stop the thread 
      _run = run; 


     } 
     @Override 
     public void run() { 
      Canvas c; 
      while (_run) {  //When setRunning(false) occurs, _run is 
       c = null;  //set to false and loop ends, stopping thread 


       try { 


        c = _surfaceHolder.lockCanvas(null); 
        synchronized (_surfaceHolder) { 

         postInvalidate(); 
       } 
} finally { 
        if (c != null) { 
         _surfaceHolder.unlockCanvasAndPost(c); 
        } 
       } 
     } 
     } 




public void surfaceCreated(SurfaceHolder holder) { 


setWillNotDraw(false); //Allows us to use invalidate() to call onDraw() 


_thread = new PanelThread(getHolder(), this); //Start the thread that 
    _thread.setRunning(true);      //will make calls to 
    _thread.start();        //onDraw() 
} 



public void surfaceDestroyed(SurfaceHolder holder) { 
try { 
    _thread.setRunning(false);    //Tells thread to stop 
_thread.join();       //Removes thread from mem. 
} catch (InterruptedException e) {} 
} 
+0

위의 코드는 좋지 않다 부울 실행 변수가 필요 특정 설정으로는 가시성을 보장하기 위해 메모리 장벽의 일종으로 수행 할 수 있습니다. 변수를 휘발성으로 만드는 것이 가장 쉬운 방법입니다. – brain

답변

0

postInvalidate() 및 setWillNotDraw()는 일반 View 및 ViewGroup 기반 그래픽에 적용됩니다. 코드가 서페이스로 드로잉됩니다. 이러한 그래픽 방식은 이러한 방식으로 혼합 및 매치 될 수 없습니다.

신입생이면서 자신이하는 일을 모르는 경우 모든 서피스 항목을 버리는 것이 좋습니다. 보기 및 ViewGroup을 기반으로 레이아웃을 디자인하고 코드를 작성하는 방법을 배웁니다. 또한 스레딩이 필요하지 않습니다. 여기

시작 : http://developer.android.com/training/basics/firstapp/index.html

+0

감사합니다! 나는 글자 그대로 무엇을해야할지 모른다. 어떻게 바꿀 수 있습니까? – user2175569

+0

위에 링크 된 "My First App"가이드를 사용해보십시오. –

+0

유일한 문제는 이것이 프로젝트를위한 것이며 그것이 필요하다는 것입니다. 그리고 나는 내일 끝내야하기 때문에 1 번 광장으로 돌아갈 시간이 없다! >. < – user2175569

관련 문제