2016-09-16 5 views
-3

많은 쉬운 방법을 생각하면, 여기에 많은 사람들이 overkilled, overcomplicated 해결책을 읽으십시오. 작업자 스레드에서 주 스레드에 액세스하여 코드를 실행하는 방법입니다.Java의 작업 스레드에서 주 스레드에 액세스하는 방법?

iOS dispatch_get_main_queue()에서 메소드는 메인 스레드를 반환합니다. 어떻게 Java에서?

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0UL), ^{ 
    //do background thread stuff 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     //update UI 
    }); 
}); 
+3

가능한 도움 [다른 스레드의 주 스레드에서 코드 실행 중] 중복 (http://stackoverflow.com/questions/11123621/running-code-in-main-thread-from-an 다른 스레드) – Augusto

+2

질문에있는 링크 중 Android와 관련이없는 링크가 있습니다. – CommonsWare

답변

0

안드로이드에서 직접 메인 스레드 (UI 스레드)에 액세스 할 수는 없지만이 Handler을 만들고 주에 작업 (Runnable)를 게시하는 핸들러를 사용합니다, 그래서 당신은 그것에 작업을 대기 할 수 실. 당신이 경우

  • : 아래

    당신이 코멘트에서 언급 @CommonsWare으로도 Handler

    new android.os.Handler(Looper.getMainLooper()).post(new Runnable() { 
         @Override 
         public void run() { 
         //Doing job here 
         } 
        }) 
    

    등을 사용하여 UI Thread에 게시 할 수있는 방법의 예입니다, UI 스레드에 접근하는 또 다른 방법이있다 어떤 View의 인스턴스가 있습니다 View.post(Runnable)

  • 인스턴스가 Activity 인 경우를 사용할 수 있습니다.

Btw는 안드로이드의 메인 쓰레드 자바 데스크톱 앱

+0

'Handler'를 만들 필요가 없습니다.'post()'는 어떤 View에서나 사용할 수 있으며 일반적으로 그 중 하나에 접근 할 수 있습니다. – CommonsWare

+0

그 밖의 솔루션 중 하나는 –

+0

@CommonsWare 그의 질문은 어떻게 작업자 스레드에서 주 스레드에 액세스하는 것입니다, 그래서 나는 그가 어떤보기에 액세스 할 수 없다고 생각하므로 –

-1

서로 주 스레드에서 코드를 실행하는 것보다 완전히 다른 접근 :

runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      // Your code here 
     } 
}); 

희망이

+0

호기심 왜 downvote? 설명? 이 코드는 AsyncTask의'doInBackground()'메소드에서 UI의 상태를 바꾸기 위해 잘 동작합니다. 이것은 "적절한"방법이 아닌가? – ShadowGod

관련 문제