2017-03-14 5 views
-4

내 스레드가 같은 시간의 지연을 만들고 각 시간 블록 후에 축배를 생성하고 싶습니다. 나는 다음과 같은 코드를 시도하지만 최대한 빨리 버튼을 누를 때 내 응용 프로그램을 닫습니다 :스레드를 시작하면 내 안드로이드 응용 프로그램이 닫힙니다

@Override 
    public void onClick(View v) { 
     new Thread() { 
      @Override 
      public void run() { 
       try 
       { 
        Toast.makeText(context, "hiiiiiiiiiiiiiii", Toast.LENGTH_SHORT).show(); 
        sleep(5000); 
        Toast.makeText(context, "hiiiiiiiiiiiiiii", Toast.LENGTH_SHORT).show(); 
        sleep(5000); 
        Toast.makeText(context, "hiiiiiiiiiiiiiii", Toast.LENGTH_SHORT).show(); 
       } catch (Exception e) { 
        Toast.makeText(context, "Exception", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }.start(); 
+0

어떤 오류가 발생하고 있습니까? –

답변

0

Ui가 아닌 스레드에서는 Ui 요소에 액세스 할 수 없습니다. 따라서 런타임 예외가 발생해야합니다. runOnUi() 또는 Handler를 사용하여 Main Thread에서 처리 할 수 ​​있습니다. 여기서 runOnUi()는 Activity 클래스의 메서드이고 A Handler를 사용하면 스레드의 MessageQueue와 관련된 Message 및 Runnable 객체를 보내고 처리 할 수 ​​있습니다.

runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      Toast.makeText(ActivityMain.this,"Message",Toast.LENGTH_LONG).show(); 
     } 
    }); 

또는 당신은

new Handler().post(new Runnable() { 
     @Override 
     public void run() { 
      Toast.makeText(ActivityMain.this,"Message",Toast.LENGTH_LONG).show(); 
     } 
    }); 

그냥 새 처리기를 만들 때, 그것은 그것을 만드는 스레드의 스레드/메시지 큐에 바인딩되어 있는지 확인 처리기

를 사용할 수 있습니다. 따라서 Ui가 아닌 스레드에서 생성해서는 안됩니다.

0

당신이 건배를 인쇄해야하므로 현재 UI를 인쇄하거나 업데이트 할 수 있도록 UI 또는 주 스레드에서 다른 스레드를 만드는을 스레드에서 다음과 같은 UI 스레드의 메시지

ActivityMain.this.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       Toast.makeText(ActivityMain.this,"Message",Toast.LENGTH_LONG).show(); 
      } 
     }); 
//ActivityMain is the name of activity in which you are working 
관련 문제