2017-01-05 1 views
0

Android 학습 스레딩의 일환으로 아래 코드를 수행했습니다.메시지가 android의 스레드에 전달되지 않았습니다.

package simple.learning.com.samplethread; 

import android.os.Handler; 
import android.os.Looper; 
import android.os.Message; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 


public class MainActivity extends AppCompatActivity { 

    MyThread myThread; 
    Button button; 

    private static class MyThread extends Thread { 
     public Handler mHandler; 

     public void run() { 
      Log.d ("TESTME", " iNSIDE RUN.."); 
      Looper.prepare(); 
      mHandler = new Handler() { 

       public void HandleMessage (Message msg) { 
        Log.d("TESTME", "iNSIDE HandleMessage"); 
        if (msg.what == 0) { 
         someWork(); 
        } 
       } 
      }; 

      Looper.loop(); 

     } 

     public void someWork() 
     { 
      while (true) { 
       Log.d("TESTME", "Inside someWork "); 
      } 
     } 

    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     myThread = new MyThread(); 
     myThread.start(); 


     Button btn = (Button) findViewById(R.id.button1); 
     assert btn != null; 
     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (myThread.mHandler != null) { 
        Log.d("TESTME", " bUTTON pRESSED.."); 
        Message msg = myThread.mHandler.obtainMessage(0); 
        myThread.mHandler.sendMessage(msg); 
       } 

      } 
     }); 
    } 
} 

버튼을 클릭하면 msg가 메시지 대기열에 게시 될 것으로 예상됩니다. 그러나 출력이 표시되지 않습니다. 어떤 도움을 주시면 감사하겠습니다.

+0

마지막으로 본 로그는 무엇입니까? –

답변

1

일부 메서드를 추가 한 실제 메서드를 재정의하는 대신 handleMessage를 재정의하는 데 약간 실수를했습니다. 아래는 작업 솔루션입니다.

private static class MyThread extends Thread { 
    public Handler mHandler; 

    public void run() { 
     Log.d("TESTME", " iNSIDE RUN.."); 
     Looper.prepare(); 
     mHandler = new Handler() { 

      @Override 
      public void handleMessage(Message msg) { 
       Log.d("TESTME", "iNSIDE HandleMessage"); 
       if (msg.what == 0) { 
        someWork(); 
       } 
      } 
     }; 

     Looper.loop(); 

    } 

    public void someWork() { 
     while (true) { 
      Log.d("TESTME", "Inside someWork "); 
     } 
    } 

} 
+0

아 .. 내가 놓친 오른쪽을 의미합니까? – DrunkenMaster

+0

또한 메서드의 이름을 잘못 지정했습니다. –

관련 문제