2014-02-24 4 views
0

내가 여기에 안드로이드 게임을 쓰고 있어요 원활 업데이트하지 않는 것은 내가 무엇을 가지고 : 내가보기를 확장하는 사용자 정의보기를 만든UI 인해 배경 스레드

:로

게임 루프가 구현됩니다. 그런 다음 내 onDraw() 메서드 내에서 invalidate()를 호출합니다.

는 MainActivity : 여기

나는 사용자 지정보기의 인스턴스를 만들고() 현재의 내보기로 그 설정 된 setContentView를 사용합니다.

내가 새로운 클래스 Graphthread을 만들어 실행 방법 안에, 내가 루프를 만들어 : 또한 터치 이벤트를

모두 잘 작동되고 원활 내가 이런 짓까지를 얻을 수 OnTouch() 메서드를 사용합니다.

public class Graphthread extends Thread 
    { 
    @Override 
    public void run() { 
     while(true) 
     { 

     } 
    } 
    } 

그럼 내 MainActivity

Graphthread gth = new Graphthread(); 

이 인스턴스를 만들어 내에서 onCreate 방법() gth.start 사용.

지금 무슨 일이 있었 다음 :

동결 다시 그래서 ... smoothly.Or 내가 다시 실행 ... 그것은 몇 밀리 초 동안 sometime..freeze에 대한 like..run 된 말을해야 실행하지 않은 게임 에.

현재 무슨 일입니까?

+1

루프 내부에 유용한 것이 있는지 여부와 관계없이 스레드가 _executing_ 무한 루프입니다. – GriffeyDog

+0

나는 그것을 안다. 그것은 단지 실험 일 뿐이다. 나는 무엇이 일어나고 있는지 알고 싶다. – umerbanday

+0

백그라운드 스레드가 UI 스레드에서 CPU 시간을 훔쳐서 정지/지터가 발생하고 있습니다. – GriffeyDog

답변

1

가벼운 불안감은 가비지 수집처럼 들립니다. 백그라운드 스레드 (또는 다른 것)가 매우 많은 양의 메모리를 소비하는 경우 GC를 더 자주 실행해야 할 수도 있습니다. 그것은 당신이 묘사 한 것과 같은 순간적 불안감을 일으킬 것입니다.

+0

고맙습니다. reply.But, 배경 스레드에서 아직 아무것도하지 않습니다. 즉 블록은 비어 있습니다. – umerbanday

0

게임에 더 적합한 방법을 시도하십시오. SurfaceView을 사용하고 배경 스레드를 사용하십시오. 이것은 메인 스레드에 의한 불규칙적 인 메시지 처리로 인한 말더듬으로부터 벗어나야합니다.

onDraw 해킹, 내 관점에서 볼 때, 일반 앱 (게임 아님) 안에 무언가를 애니메이트하려는 경우에만 적합하며 애니메이션 프레임 워크는 거의 사용되지 않습니다. 예를 들어 이미지 팬 및 크기 조정.