2013-12-20 118 views
0

我想了解如何在Android上运行BroadcastReceivers。 我的问题是,在我拨打sendBroadcastLocalBroadcastManager到我的BroadcastReceiver收到时间之间会有延迟吗?该呼叫是否同步?LocalBroadcastManager执行顺序

例如,当调用myFunction时,将输出为2112

myFunction { 
    sendBroadcast; 
    print "1"; 
} 

myReceiver { 
    print "2"; 
} 

如果是函数运行改为

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

myReceiver1 { 
    print "2"; 
} 

myReceiver2 { 
    print "3"; 
} 

将全部从myFunction叫其它功能的接收器之前被调用?

+0

为什么你不试试看看。 – Kuffs

+0

如果我尝试它,我会为我所尝试的答案得到答案。我正在寻找一个解释,说明它是如何工作的,而不是在某些特定的场合会有什么结果 – BarbM

回答

1

意图正在一个接一个地发送,就像消息队列上的任何事件一样。

没有任何延迟,只能等待您的事件/意图被照顾,因为可能会有其他事件/意图首先被处理。

它们都在UI线程上调用,它在所有事件(和意图)上循环,因此它被称为主循环线程。

+0

在理想的环境中,队列中没有其他意图。有什么优先?处理事件/意图或继续执行代码?主循环线程听起来像一个工作线程给我,但是这种情况? – BarbM

+0

它就像一个队列。你添加了更多的项目,并且只有当你完成了当前的函数调用(你的案例中的“myFunction”),收集到的意图才会一个接一个地处理,这意味着订单将是“myFunction”,无论谁监听“sendBroadcast1”,然后监听“sendBroadcast2”。这与任何其他事件完全相同。例如onClickEvent - 如果您调试了应用程序并使其停止在某个功能上,然后在按钮上多次点击,事件就会被收集起来,当您释放调试时,所有事件都将被逐个处理。 –

+0

hmm ok,所以你基本上说在第二个例子中,它会打印1,并且在myFunction的所有其他执行完成后,它将打印出23个。我将测试该场景,并希望我会从更多人获得更多反馈,如果是这种情况,我会提高你的答案。 – 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线程中调用,除非使用处理程序..and这就是让我困惑的地方,如果它们不是异步的,它们是如何处理的。 – BarbM

+0

嗯,所以可能你可以尝试一个例子,并保持我们的发布 –