2017-01-05 4 views
1

난 내가 만든 다른 스레드에서 오전 말할 수 있습니다를 사용하여 mainThread에 대한 처리기 게시물 안드로이드에서 나는 다음을 수행 할 수 있습니다 는 Lopper.getMainLooper()

//this is called from another thread (not mainTread) 

new Handler(Lopper.getMainLooper()).post(new Runnable() { 
        @Override 
        public void run() { 
         mAdapter.notifyDataSetChanged(); 
        } 
       }); 

내가 여기 핸들러가 연결되어 있는지 이해입니다 스레드와 함께하지만 mainThreads 루퍼를 사용하고 있기 때문에 mainThreads 메시지 대기열에 실행 파일을 보내 처리합니다. 그리고 그게 사실이라면 어떤 스레드의 모든 핸들러가 다른 스레드를 받아 들여 루퍼에 게시 할 수 있습니까? 그 맞습니까 ?

또는 "new Handler (Lopper.getMainLopper())"가 mainThread 핸들러가됩니까?

답변

1

네, 맞습니다.

  1. 하나의 스레드에는 하나의 고유 루퍼 만있을 수 있으며 연관된 고유 한 핸들러가 여러 개있을 수 있습니다.
  2. 처리기는 스레드의 루퍼를 통해 인스턴스화하는 스레드와 암시 적으로 연관됩니다. 또한 Looper를 생성자에 전달하여 핸들러를 모든 스레드와 연결시킬 수 있습니다.

나는이 문제의 더 나은 이해를 파악 this article에서 눈을 위해 추천 할 것입니다.

1

시도해주세요 ... Looper.getMainLooper()context.getMainLooper()으로 대체하십시오. 작동해야합니다.

new Handler(context.getMainLooper()).post(new Runnable() { 
        @Override 
        public void run() { 
         mAdapter.notifyDataSetChanged(); 
        } 
       }); 
+0

제 질문은 실제로 이론적입니다. 어떤 핸들러도 루퍼를 가지고 단순히 어떤 스레드와도 대화 할 수 있는지 알고 싶었습니다. – j2emanue

+0

만약 당신이 looper에 접근 할 수 있다면 왜 looper는 쓰레드에 프로세스 큐를 유지할까요? –