Java Android:在多活动应用程序中使用服务的正确方式

Java Android:在多活动应用程序中使用服务的正确方式,java,android,service,Java,Android,Service,我知道,关于泄露Android服务以及如何在应用程序中维护服务,有很多问题,但这有点像是看到两个医生有一个问题:你会得到三种不同的意见 换句话说:我完全不确定如何以正确的方式处理我的服务。所以这个问题 我有以下内容:几个活动和一个BoundService,它在应用程序启动时启动,应该一直保持活动状态,直到应用程序关闭 delevoper建议使用绑定服务来简化服务和活动之间的通信。因此,我在每个activitie的onStart中绑定我的服务,并在每个onStop中解除绑定以防止泄漏 此外,我在几

我知道,关于泄露Android服务以及如何在应用程序中维护服务,有很多问题,但这有点像是看到两个医生有一个问题:你会得到三种不同的意见

换句话说:我完全不确定如何以正确的方式处理我的服务。所以这个问题

我有以下内容:几个活动和一个BoundService,它在应用程序启动时启动,应该一直保持活动状态,直到应用程序关闭

delevoper建议使用绑定服务来简化服务和活动之间的通信。因此,我在每个activitie的onStart中绑定我的服务,并在每个onStop中解除绑定以防止泄漏

此外,我在几个线程中读到,当没有活动绑定到服务时,应该使用startService来防止服务被破坏。因此,我在我的第一个活动中使用了一个明确的startService,在我的应用程序的每个出口点上使用了一个stopService

所以基本上我有这个作为我的服务:

然后开始这样的活动:

public class ActFirstActivity extends Activity {
    private NetworkService      networkService;
    private boolean             networkServiceIsBound   = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act_1);
    }

    @Override
    protected void onStart() {
        super.onStart();

        Intent serviceIntent = new Intent(this, NetworkService.class);
        startService(serviceIntent);
        bindService(serviceIntent, networkServiceConnection, Context.BIND_AUTO_CREATE);
    }

    @Override
    protected void onStop() {
        super.onStop();
        unbindService(networkServiceConnection);
    }

    private ServiceConnection networkServiceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName className, IBinder service) {
            ServiceBinder binder = (ServiceBinder) service;
            networkService = binder.getService();
            networkServiceIsBound = true;
        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {
            networkServiceIsBound = false;
        }
    };
}
其他每个活动都将具有相同的绑定/取消绑定功能和相同的ServiceConnection。据我所知,这可以防止我的应用程序泄漏服务连接。但我的印象是,我在这里引入了很多开销。如何做到这一点

安全无泄漏, b有效的最小开销,以及 c易于维护代码?
感谢所有花时间回答问题的人:

ad b而不是结对恢复/暂停使用活动的开始/停止事件如果onPause被调用,并且活动被暂停然后被销毁(例如,由于资源短缺),这不会导致服务泄漏吗?如果它被销毁,那么谁在乎呢?请参阅:部分附加注释感谢-相应编辑的线程中的代码
public class ActFirstActivity extends Activity {
    private NetworkService      networkService;
    private boolean             networkServiceIsBound   = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act_1);
    }

    @Override
    protected void onStart() {
        super.onStart();

        Intent serviceIntent = new Intent(this, NetworkService.class);
        startService(serviceIntent);
        bindService(serviceIntent, networkServiceConnection, Context.BIND_AUTO_CREATE);
    }

    @Override
    protected void onStop() {
        super.onStop();
        unbindService(networkServiceConnection);
    }

    private ServiceConnection networkServiceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName className, IBinder service) {
            ServiceBinder binder = (ServiceBinder) service;
            networkService = binder.getService();
            networkServiceIsBound = true;
        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {
            networkServiceIsBound = false;
        }
    };
}