program story

handler.post () 사용시기 및 새 Thread ()시기

inputbox 2021. 1. 6. 08:16
반응형

handler.post () 사용시기 및 새 Thread ()시기


언제 사용해야 handler.post(runnable);하고 언제 사용해야하는지 궁금 합니다.new Thread(runnable).start();

Handler에 대한 개발자 문서에 언급되어 있습니다.

Runnable r이 메시지 큐에 추가되도록합니다. runnable은이 핸들러가 연결된 스레드에서 실행됩니다.

내가 쓸 경우이 평균을 하는가 onCreate()Activity클래스 :

Handler handler = new Handler();
handler.post(runnable);

그런 다음 runnable은 별도의 스레드 또는 활동의 스레드에서 호출됩니까?


Handler.post()UI 스레드에서 작업을 수행 할 때마다 사용해야합니다 .

따라서 (별도의 스레드에서 실행되는) 콜백에서 TextView의 텍스트 를 변경하려는 경우 Handler.post().

Android에서 다른 많은 UI 프레임 워크와 마찬가지로 UI 요소 (위젯)는 메인 스레드에서만 수정할 수 있습니다.


편집 : 장기 실행 작업의 예

mHandler = new Handler();

new Thread(new Runnable() {
  @Override
  public void run () {
    // Perform long-running task here
    // (like audio buffering).
    // you may want to update some progress
    // bar every second, so use handler:
    mHandler.post(new Runnable() {
     @Override
     public void run () {
       // make operation on UI - on example
       // on progress bar.
     }
    });
  }
}).start();

물론 수행하려는 작업이 정말 길고 그 동안 사용자가 다른 앱으로 전환 할 위험이있는 경우 서비스 사용을 고려해야합니다 .


구체적인 질문에 답하려면 :

onCreate of Activity 클래스에서 다음과 같이 작성하면 이것이 의미합니까?

핸들러 핸들러 = new Handler () hanlder.post (runnable); 그러면 runnable이 별도의 스레드에서 호출되거나 활동의 스레드에서 호출됩니까?

아니에요. Runnable은 메인 스레드 자체에서 호출됩니다. 핸들러는 첨부 된 스레드 (생성 된 위치)에 메시지를 게시하는 데 사용됩니다. 자체적으로 스레드를 생성하지 않습니다. 귀하의 예제에서 메인 스레드 (Activity.OnCreate ()가 호출되는 곳)에 핸들러를 만들었으므로 이러한 핸들러에 게시 된 모든 메시지는 메인 스레드에서만 실행됩니다.


예를 들면 다음과 같습니다.

mHandler = new Handler();
new Thread(new Runnable(){
  @Override
  public void run () {
    mHandler.post(new Runnable() {
     @Override
     public void run () {
       mUiView.setX(x);
     }
    });
  }
}).start();

또는 핸들러를 건너 뛰고 뷰에서 직접 post 메소드를 사용할 수 있습니다.

new Thread(new Runnable(){
  @Override
  public void run () {
    mUiView.post(new Runnable() {
     @Override
     public void run () {
       mUiView.setX(x);
     }
    });
  }
}).start();

이것은 차이점을 설명하는 좋은 글입니다 . post 메소드는 정확히 무엇을합니까?


use handler.post() when you want to post the code (usually from background thread) to the main thread. Yea, POST,just like you, post a letter to someone. With the help of handler the code will be executed ASAP i.e. almost immediately.

ReferenceURL : https://stackoverflow.com/questions/15136199/when-to-use-handler-post-when-to-new-thread

반응형