2011-09-16 84 views
2

我发现,当一个广播接收器开始服务的onReceive()方法中,的onReceive(返回)将之前发生的顺序正在调用服务的onCreate()。为什么按照这个顺序发生?当广播接收器启动的服务

的示例代码如下:BroradcastReceiveronReceive()方法:

public void onReceive(Context context, Intent intent) { 
    Log.i("=====Receiver=======","===== onReceive starts===="); // (1)      
    intent.setClass(context, AService.class); 
    context.startService(intent); 
    Log.i("=====Receiver=======","===== onReceive ends===="); // (2) 
} 

ServiceonCreate()方法:

public void onCreate(){      
    Log.i("=======Service========", "========OnCreate()=== "); //(3)    
    // some logic here     
} 

日志顺序为(1)(2)(3),不是(1)(3)(2)。

有人可以帮忙解释吗?

回答

3

该服务有自己的线程,所以我猜想它不会运行,直到执行onReceive的线程产生。也可能是startService发布了一个意图,但是直到onReceive返回,它才会被处理。我不知道实际的实现,但我知道startService是一个异步调用,所以你不应该依赖于onReceive的执行顺序。

+0

感谢您的答复。我认为发布意图比“服务有其自己的线索”更合理。因为我发现服务启动时没有创建新的线程。但我不确定startService()的细节。无论如何,再次感谢。 – Harry