15

アプリを開発し、いくつかのテストを実行しました。このテストでは、あるバックグラウンド サービスから別のバックグラウンド サービスにデータを送信します。すべてのデータは、伝送速度が低いときに受信されました (4 インテント/秒)。ただし、送信速度を上げたとき (8 および 12 インテント/秒)、一部のデータ (通常は 2 ~ 3%) が宛先サービスで受信されませんでした。

すべての意図がブロードキャストされ、サービスがローカルで実行されていました。

データが受信者によって受信されなかった理由を見つけるために、OSがインテントをどのように処理し、メカニズム全体がどのように機能するかを誰か教えてもらえますか?

よろしくお願いします、

4

3 に答える 3

3

まず、サービスをバインドしてから、IPCのハンドラーを使用することをお勧めします。良い例はここにあります:http://developer.android.com/guide/components/bound-services.htmlこれははるかに高速で信頼性があります。

インテントが内部でどのように機能するかについては、ソースコードをご覧ください:https ://github.com/android/platform_frameworks_base/blob/master/core/java/android/app/ContextImpl.java#L893

于 2012-06-26T08:57:17.453 に答える
3

関連するメソッドは次のとおりです (最初のメソッドが ContextImpl.broadcastIntent() メソッドから呼び出されていることがわかります。Forceの回答のリンクを参照してください)。

于 2012-06-26T09:14:47.793 に答える
1

考えられる理由の 1 つは、Android のプロセス間通信が同期的であることです。呼び出し元のクライアント プロセスは、サーバー プロセスが応答している間ブロックされます。タイマーを使用したサービスが(非常に短い)期間ブロックされているため、観察した動作が発生する可能性があります。

出典: Android Binder - Thorsten Schreiber による Android プロセス間通信、p 11 - 13。

EDIT : Chris Stratton と João Nunes のコメントは価値があるため、回答を公開したままにしました。

于 2012-06-26T15:50:38.733 に答える