为什么我会用绑定的服务?(Why would I use a Bound Service?)

2019-08-17 02:06发布

对于应用程序和服务,为什么我会用绑定的服务,而不是在Intent发送数据之间的通信:

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

我读了“如果服务已在运行,它将被onStartCommand()再次呼吁,为客户提供新的意图,但不是会创建第二个副本。” 这意味着我能实现这一意图将消息发送到影响服务的进步,这是在谷歌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();
}

Answer 1:

有用于相对于在发送异步消息绑定到服务有许多原因。 一个重要原因是它给你一个服务的生命周期进行更多的控制。 如果你只是发送了由服务处理的意图,该服务可能消失 - 失去任何内部状态 - 消息之间。 绑定服务得到特殊的待遇时,Android正在寻找可以释放资源。

其它不相关的,原因是,如果你绑定到一个进程内服务,您可以直接施放的IBinder到一个已知的类和调用方法就可以了。 这提供了非常丰富的(尽管紧密耦合)接口到服务。 这将是很难使用的消息通过意图传递模拟这种丰富的互动。



文章来源: Why would I use a Bound Service?