2014-04-27 3 views
0

나는 사이먼이 말하는 게임을 개발해 왔지만 일단 버튼의 순서를 보여주기 위해이 메소드를 호출하면 너무 빠르게 보여진다. 이미 Thread.sleep (2000), Handler.postDelayed (new Runnable, 2000)를 시도했지만 작동하지 않았습니다.Android에서 일시적으로 루프를 일시 중지하는 방법은 무엇입니까?

public void showOrder(){ 
    for(Integer elem : values){ 
     //Pauses for 2 seconds 

     //************************************HOW???????????????? 
     switch (elem) { 
      case 2131165245: 
       //buttonUp shines 
       buttonUp.startAnimation(vanish); 
       break; 
      case 2131165246: 
       //buttonLeft shines 
       buttonLeft.startAnimation(vanish); 
        break; 
      case 2131165247: 
       //buttonRight shines 
        buttonRight.startAnimation(vanish); 
        break; 
      case 2131165248: 
       //buttonDown shines 
       buttonDown.startAnimation(vanish); 
       break; 
     } 

    } 

} 

희망 누군가가 나 있습니다 :

여기 내 코드입니다!

+3

'2131165245'와 같은 리터럴이 아닌'R.id'의 상수를 사용해야합니다. –

답변

2

올바른 해결책은

가 그렇지 않은 경우에 잠을 가진 다른 스레드에서하는 방법을 사용, 올바른 시간 애니메이션 지속 시간을하는 것 - 바로 확인이 UI 스레드에서 실행되고 있지을

0

정적 방식으로 처리기를 사용할 수 없습니다. 처음에 액티비티 안에 새로운 핸들러 인스턴스를 생성해야합니다 (OP에 대한 언급이 없으므로 메소드 호출이 액티비티 안에 있다고 가정). 다음과 같이 할 수 있습니다 :

class blah extends activity{ 

    Handler handler=null; 

    protected void onCreate(Bundle xyz) { 

     //initial code 
     super.onCreate(xyz); 
     setContentView(R.layout.content); 


     //create handler 
     handler = new Handler(); 

     //remaining code 

     showOrder(); 

    } 

    void showOrder() { 
     for(Integer elem : values){ 
     handler.postDelayed(new Runnable() { 

       // content 

     }, 2000); 
    } 

} 

또 다른 할 일은 asynctask를 만들고 수행하는 것입니다. 자세한 내용은 Worker threads android 개발자 안내서를 참조하십시오. Asynctasks를 사용하면 ANR을 발생시키지 않고 잠자기 상태로 만들 수있는 baground '작업자 스레드'에서 작업을 수행하고 결과를 기본 UI 스레드에 게시 할 수 있습니다.

Android 개발자 블로그의 Painless threading을 읽으십시오.

해피 코딩! :)

관련 문제