나는 자바와 안드로이드에 대해 처음 접했다. 이제 고객보기보다 빠른 속도로 캔버스를 사용하여 표면 뷰를 그립니다. 그것이 내가 종류 얻고 안드로이드 동기화 표면보기에 올 때 그러나의동기화 된 안드로이드 표면보기
는 내가 약간 형태의 변형 예 두 가지 버전이
기준도 http://android-er.blogspot.com/2010/05/android-surfaceview.html 안드로이드 달 착륙선으로이 링크을 혼동 내가 surfaceview 렌더링 쓰레드를 실행할 때 메소드 부분을 실행하지만, 어느 것이 더 정확한지 확신 할 수 없다. 둘 다 작동합니다, 하지만 저는 단지 내 개념을 정리하고 싶습니다.
진보에 어떤 도움과 제안에 대한감사 내가 잘못된 방법으로 질문이있는 경우도 나를 :)
버전 1 수정하십시오
protected void run()
{
while (isRunning)
{
if(RenderThreadSurfaceHolder.getSurface().isValid())
{
Canvas Draw = null;
try
{
Draw =RenderThreadSurfaceHolder.lockCanvas(null);
synchronized (RenderThreadSurfaceHolder){
if(Draw!=null)
{
RenderThreadSurfaceView.onDraw(Draw);
}
}
}
finally{
if(Draw!=null)
{
RenderThreadSurfaceHolder.unlockCanvasAndPost(Draw);
}
}
}
}
}
버전 2 :
protected void run()
{
while (isRunning)
{
Canvas Draw = null;
try
{
synchronized (RenderThreadSurfaceHolder)
{
if(RenderThreadSurfaceHolder.getSurface().isValid())
{
Draw=RenderThreadSurfaceHolder.lockCanvas(null);
if(Draw!=null)
{
RenderThreadSurfaceView.onDraw(Draw);
}
}
}
}
finally
{
if (Draw != null)
{
RenderThreadSurfaceHolder.unlockCanvasAndPost(Draw);
}
}
}
}
을 편집
n 추가 표면보기 동기화 또한 작업 및 OnDraw 메서드간에 데이터를 공유하는 데이터를 제어하기 위해 자물쇠를 추가하려는 경우 많은 데이터와 많은 프로세스 기능이 동기화되어 있다고 생각하기 때문에 너무 많은 오버 헤드가 발생합니다 그래서 동기화 된 부울,하지만 인터넷에서 연구를 무엇 동기화 부울 정말 좋은 아이디어 // 여전히 혼란 나에게 많은 아니라고 말할 같은
synchronized (Check)
{
Check=true;
}
하지만 아래
private static lock Lock; //declare in the Activity
public synchronized void setlock(boolean newlock)
{
if (newlock!=lock){
lock = newlock;
}
}
public synchronized boolean isTrue() {
return lock;
}
뭔가를 할 경우
그게 맞습니까? 좋지 않은 생각인가?
내 개념은 처리 기능과의 OnDraw 방법 사이에 잠금 장치를 추가 할 수 있습니다 :
안녕하세요. 관련 질문이 더 많습니다. ~ 내 질문을 편집했으며 도움을 주셔서 감사합니다. – user1316408
부울에 대해 편집 됨 – edthethird
고맙습니다 미안 해요 늦게 회신 드리겠습니다. 원자적인 부울을 대신 사용하여 동기화 할 수 있다고 생각합니다. 왜 내가 업데이트를 잠그고 싶은지는 bcz 제가 그려야 할 것들이 변경되었습니다. 주요 활동 및 프로세스 데이터 시간 동안 나는 표면보기 데이터에 액세스하고 싶지 않아,하지만 내 개념이 옳았는지 모르겠다 :) – user1316408