2014-11-23 7 views
1

Android로 내보내기를 지원하는 Unity 게임 엔진을 사용하고 있습니다.Android의 콜백을 임의의 스레드에 게시하는 방법

엔진은 UI 스레드와 모든 사용자 지정 코드가 실행되는 별도의 스크립팅 스레드를 포함하여 여러 스레드를 사용합니다.

내 시나리오에서는 백그라운드 스레드에서 일부 작업을 호출해야하며 결과를 주 스크립팅 스레드로 다시 마샬링해야합니다.

나는 AsyncTask, ExecutorLooper 클래스의 기초를 알고 있습니다. 이 중에서 Looper는 대기열을 설정하고 주어진 스레드에 메시지를 다시 게시 할 수 있으므로 (AsyncTask는 UI 스레드에서 콜백을 실행하기 위해 "하드 와이어드 (hardwired)"되어 있습니다.이 스레드는 내가 원하는 것을 원하지 않습니다).

이 작업을 수행하는 올바른 방법은 무엇입니까?

+1

처리기는 백그라운드 스레드에서 작업을 호출하는 데 도움을줍니다. – Shriram

+0

사용자 정의 BroadcastReceiver는 어떻습니까? –

+0

@DonChakkappan 위의 설명에서 제안 된대로 Handler가이를 수행 할 것으로 믿습니다. 나는 하나와 일하지 않았지만 그 클래스에 대한 문서를 점검 할 것입니다. –

답변

1

UI 스레드와 통신하기 위해 3 개 가지 방법이 있습니다 :

  1. Activity.runOnUiThread(Runnable)

  2. View.post(Runnable)

  3. Handlers

    귀하의 경우에는

, 나는 당신을 조언 만들다 Handler, 2 개 첫 번째 솔루션은 단지 Looper가 설정되어 있는지 확인 앱에서 어떤 스레드를 사용하려는 경우 당신은 당신의 Activity의 참조 또는 View

편집

을 가지고 있음을 의미로 , 당신은 메시지 큐를 통해 수행해야합니다 스레드에서하고 싶은 모든 다른 작업 : 및이 Handler

class YourLooperThread extends Thread 
{ 
    // make it accessible from the outside 
    private Handler handler; 

    @Override public void run() 
    { 
     Looper.prepare(); 

     // Customize your handler, it has to be used in any thread which want to push a message in this thread's looper message Queue 
     handler = new Handler(); 

     Looper.loop(); 
    } 
} 

주의 관련된 사용 즉 핸들러에 실행 파일을 게시합니다. 여기에 대한 자세한 정보 : Handlers, MessageQueue, Looper, do they all run on the UI thread?

+0

감사합니다. 내 질문에 구체적으로 비록 내가 UI 스레드에서 실행하고 싶지는 않지만 프로세스의 임의의 스레드에서 언급했다. –

+0

나는 나의 대답을 편집했다 – ToYonos

+0

고마워. 그것들은 커스텀 Thread 클래스에 배치되어야 하는가? 내가 가진 상황은 이미 프레임 워크에 의해 만들어진 스레드입니다. Handler와 Looper를 추가하여 게시자가 다른 스레드에 게시하여 게시 할 수 있습니까? 또한 모든 작업이 메시지 큐를 통해 수행되어야한다는 것은 무엇을 의미합니까? –