2011-09-16 6 views
2

は私がBroadcastReceiverサービスを開始したときにonReceive()メソッド、onReceive(の復帰で)の前に起こるだろうことがわかりサービスを開始順序onCreate()が呼び出されています。これはなぜこの順番で起こるのですか?BroadcastReceiverが

コード例は以下である: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にrrlatedされた実行順序に依存してはいけません。

+0

返信いただきありがとうございます。私は意図を掲示する方が「サービスには独自のスレッドがある」よりも合理的だと思います。サービスが開始されたときに新しいスレッドが作成されていないことがわかったからです。しかし、私はstartService()の詳細については不明です。とにかくもう一度お礼します。 – Harry

関連する問題