2010-12-19 4 views
1

끝 시퀀스를 제외하고 내 안드로이드 애플 리케이션은 잘 동작합니다. 사용자가 정보를 취할 시간이 있도록안드로이드에서 GUI 느려짐

TextView allscores = new TextView(this); 

allscores.setText("Your score: "+ mypoints); 

다음 내가 몇 초 동안 침체에 GUI를 원하는 : 그것의 게임 마지막에 화면은 점수를 보여줍니다. 아마 2 또는 3 초 괜찮습니다.

try { 
       Thread.sleep(3000); 

      } catch (InterruptedException e) { 

       e.printStackTrace(); 
      } 

          layout.removeAllViews(); 

염두에두고, 저는 스레드 프로그래밍에 익숙하지 않습니다. 이 모든 것은 UI 스레드에서 수행되며 다른 스레드는 실행되지 않습니다. 다음으로는 최종 시작 화면의 결말에 넣어 :

AnView animator = new AnView(this); 

      layout.addView(animator); 

AnView보기 내 자신의 확장입니다.

모두 모두 훌륭합니다. 문제는 스레드가 최종 점수를 표시하지 않고 3 초 동안 잔다는 것입니다. 나는 이유를 모른다. 나는 왜 그것이 자고 전에 내 마지막 점수를 표시하지 않는지 모르겠다. 실제로 비어있어 모든보기가 제거 된 후 잠자기 상태임을 나타냅니다.

+0

어쩌면 답 "UI 스레드에서 비싼 작업 처리"를. com/questions/4203579/sleep-command-for-android – Curd

답변

3

UI 스레드를 잠자기하면 텍스트가 변경되는 레이아웃 및 그리기 작업이 방해 받기 때문에 점수가 표시되지 않습니다. UI 스레드에서 절대로 절전 모드로 전환하지 마십시오.

새로운 스레드를 사용하면 잔인합니다. Handler와 postDelayed 메서드를 사용하면 지연 후에 어떤 일이 일어나게됩니다. 당신이 나중에 뭔가를 할 때

private final Handler mHandler = new Handler(); 

다음

다른 사람들이 지적했듯이
mHandler.postDelayed(new Runnable() { 
    public void run() { 
     doDelayedThing(); 
    } 
}, 3000); 
1

기본 UI 스레드를 잠자 게하지 않는 것이 좋습니다. 다음과 같이 시도하십시오.

새 스레드 (새 Runnable() { // 여기에서 작업하십시오. });

점수에 토스트 팝업을 사용해 볼 수도 있습니다.

+0

정말요? UI 스레드에서 GUI 프로그래밍에 대한 대부분의 작업을 수행하도록 권유 받았습니다. 잠들지 않는 이유가 있을까요? –

+1

"단일 스레드 모델"에 대해 이야기 할 때 몇 줄을 읽으십시오. http://developer.android.com/resources/articles/painless-threading.html 저는 UI 스레드를 잠자 게 될 것이고 심지어 보기를 표시하십시오. – Realn0whereman

+0

그냥 리스너를 사용하여 사용자의 키를 듣고 스플래시 화면으로 이동하십시오.그렇게하면 사용자는 항상 점수를보고 필요로하는 모든 시간을 사용자에게 제공 할 수 있으며 작업에 대한 청취자 만 사용하므로 항상 응답 성을 유지하면서 동일한 스레드를 사용할 수 있습니다. –

1

또한 타이머를 사용하여 3 초를 기다릴 수도 있습니다. 그러면 3 초 후에 새 스레드가 시작됩니다.

Timer timer = new Timer(); 
timer.schedule(new TimerTask() { 
    @Override 
    public void run() { 
       AnView animator = new AnView(this); 
       layout.addView(animator); 
    } 
}, 3000); 
관련 문제