Android广播接收器:它们可以同时执行还是总是连续执行?

时间:2011-08-07 11:07:55

标签: android broadcastreceiver

我对广播接收器有点困惑。我有一个广播接收器,它在TIME_SET和TIMEZONE_CHANGED动作时触发(代码如下)。我想知道的是,当触发TIME_SET和TIMEZONE_CHANGED动作时,可以同时触发OnDateTimeChanged(参见下面的代码)(并且它的执行重叠),或者总是会在另一个之后触发?根据我做的一些简单的实验,我得到的印象是OnDateTimeChanged的两次执行是连续触发的,没有时间重叠,但我不能100%肯定这一点。如果有人有想法,我会很开心。

<!-- Excerpt from manifest -->
<receiver android:name=".OnDateTimeChanged">
    <intent-filter>
        <action android:name="android.intent.action.TIME_SET"/>
        <action android:name="android.intent.action.TIMEZONE_CHANGED"/>
    </intent-filter>
</receiver>


// Broadcast receiver class
public class OnDateTimeChanged extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        // Do some work here
    }
}

BTW,在设置 - 日期和时间下切换到自动模式时,可以触发TIME_SET和TIMEZONE_CHANGED,这会改变时间和时区。

-Ali

1 个答案:

答案 0 :(得分:0)

逻辑上,它们都会同时执行。在物理上,一次只能占用一个核心,并且可能在另一个核心开始之前完成。在相同条件下,行为可能看起来是一致的。文档本身将其描述为“广播的所有接收者都以不确定的顺序运行,通常是同时运行。”

如果你想让其他接收者有机会跑,你可以调用Thread.yield()。