2013-12-20 1 views
0

BroadcastReceivers이 Android에서 작동하는 방식을 이해하려고합니다. 제 질문은 sendBroadcastLocalBroadcastManager으로 전화하는 시간과 제 BroadcastReceiver에 수신 된 시간 사이에 지연이 있습니까? 통화가 동기일까요?LocalBroadcastManager 실행 순서

예를 들어, myFunction을 호출 할 때 출력은 21 또는 12 ??

myFunction { 
    sendBroadcast; 
    print "1"; 
} 

myReceiver { 
    print "2"; 
} 

함수의 실행은 myFunction에서 호출 다른 모든 기능은 수신기 전에 호출됩니다

myFunction { 
    sendBroadcast1; 
    print "1"; 
    sendBroadcast2; 
    callALotOfOtherFunctions; 
} 

myReceiver1 { 
    print "2"; 
} 

myReceiver2 { 
    print "3"; 
} 

로 변경 무슨 경우?

+0

왜 시도해 보지 않습니까? – Kuffs

+0

시도해 보면 내가 시도한 것에 대한 답을 얻을 수 있습니다. 어떤 특정 상황에서 어떻게 작동하는지에 대한 설명을 찾고 싶습니다. – BarbM

답변

1

메시지 대기열의 이벤트와 마찬가지로 하나씩 인 텐트가 차례로 전송됩니다.

먼저 처리해야 할 다른 이벤트/의도가있을 수 있으므로 지연이없고 이벤트/의도를 처리하기 위해 대기하고 있습니다.

모두 UI 스레드에서 호출되며 모든 이벤트 (및 인 텐트)를 반복하므로 주 루퍼 스레드라고합니다.

+0

대기열에 다른 의도가없는 이상적인 환경에서. 우선 순위는 무엇입니까? 이벤트/의도 처리 또는 코드 실행 진행 ?? 주 루퍼 스레드는 나에게 작업 스레드로 들리지만,이 경우입니까? – BarbM

+0

대기열과 비슷합니다. 더 많은 항목을 추가하고 현재 함수 호출 ("myFunction"귀하의 경우)을 완료 한 경우에만 수집 된 의도는 차례대로 처리됩니다. 즉, 순서는 "myFunction"이 될 것입니다. "sendBroadcast1"을 듣고 "sendBroadcast2"를 청취하는 사람. 이것은 다른 이벤트와 완전히 동일합니다. 예를 들어 onClickEvent - 앱을 디버그하여 특정 기능에서 멈추게하고 버튼 하나를 여러 번 클릭하면 이벤트가 수집되고 디버깅을 해제하면 모두 하나씩 처리됩니다. –

+0

흠 좋습니다. 두 번째 예제에서 1을 인쇄하고 myFunction의 다른 모든 실행이 완료되면 23이 인쇄됩니다. 시나리오를 테스트하고 더 많은 사람들로부터 피드백을 받기를 바랍니다. , 만약 그렇다면, 나는 당신의 답을 upvote 것입니다. – BarbM

0

내가 브로드 캐스트 리시버는 비동기 적으로 작동하여 믿고, 그래서 (내가 잘 모르겠어요) 예 당신의 기능이 수신기 작업을 완료하기 전에 실행할 수 있습니다,

이 시도하고 자신에 대한 결과를 볼 수

myFunction { 
    sendBroadcast1; 
    print "1"; 
    sendBroadcast2; 
    callALotOfOtherFunctions; 
} 

myReceiver1 { 
    print("rec1 begins") 
    sleep(1000) 
    print("rec1 ends") 
} 

myReceiver2 { 
    print("rec2 begins") 
    sleep(1000) 
    print("rec2 ends") 
} 

인쇄 전에 함수가 호출되는지 확인하십시오.

+0

핸들러를 사용하는 경우를 제외하고 UI 스레드에서 호출되는 문서에서 비동기라고 생각하지 않는다. 그게 나를 혼란스럽게하는거야, 만약 그들이 비동기가 아니고, 어떻게 처리되는지 .. – BarbM

+0

흠, 그래서 당신이 예제를 시도해 볼 수도 있고 우리를 계속 게시 할 수 있습니다. –