5

アプリケーションとサービス間の通信に、インテントでデータを送信するのではなく、バインドされたサービスを使用する理由:

mServiceIntent = new Intent(getActivity(), RSSPullService.class);
mServiceIntent.setData(Uri.parse(dataUrl));

「サービスが既に実行されている場合、新しいインテントを配信するために onStartCommand() で再度呼び出されますが、2 番目のコピーは作成されません」と読みました。これは、サービスの進行状況に影響を与える目的でメッセージを送信できることを意味します。これは、Google RandomMusicPlayer の例で行われていることです。

public void onClick(View target) {
    // Send the correct intent to the MusicService, according to the 
    // button that was clicked
    if (target == mPlayButton)
        startService(new Intent(MusicService.ACTION_PLAY));
    else if (target == mPauseButton)
        startService(new Intent(MusicService.ACTION_PAUSE));
    else if (target == mSkipButton)
        startService(new Intent(MusicService.ACTION_SKIP));
    else if (target == mRewindButton)
        startService(new Intent(MusicService.ACTION_REWIND));
    else if (target == mStopButton)
        startService(new Intent(MusicService.ACTION_STOP));
    else if (target == mEjectButton) {
        showUrlDialog();
}
4

1 に答える 1

0

非同期メッセージを送信するのではなく、サービスにバインドする理由はいくつかあります。重要な理由の1つは、サービスの存続期間をより細かく制御できることです。サービスによって処理されるインテントを送信するだけの場合、メッセージ間でサービスが停止し、内部状態が失われる可能性があります。Androidが解放可能なリソースを探している場合、バインドされたサービスは特別な扱いを受けます。

もう1つの無関係な理由は、インプロセスサービスにバインドしている場合、IBinderを既知のクラスにキャストし、そのクラスのメソッドを直接呼び出すことができることです。これにより、サービスへの非常に豊富な(緊密に結合された)インターフェースが提供されます。インテントを介したメッセージパッシングを使用して、この豊富な相互作用をシミュレートすることは困難です。

于 2013-02-20T20:41:34.833 に答える