我知道,关于泄露Android服务以及如何维护"有很多问题。应用程序中的服务,但有点像看到两位医生有一个问题:你得到三种不同的意见......
换句话说:我完全不确定,如何以适当的方式处理我的服务。因此这个问题。
我有以下内容:多个Activities
和一个BoundService
,它在应用启动时启动,应该保持活动状态,直到应用关闭。
Android.delevoper建议使用绑定服务来简化Service
和Activity
之间的通信。因此,我在每个活动onStart()
中绑定我的服务,并在每个onStop()
中取消绑定,以防止泄露。
另外,我在几个线程中读到,当没有Activity再绑定它时,应该使用startService()来防止服务被销毁。所以我在我的第一个startService()
使用了明确的Activity
,并在我的应用的每个退出点使用了stopService()
。
基本上我将此作为我的Service
:
public class NetworkService extends Service {
private final IBinder binder = new ServiceBinder();
@Override
public void onCreate() {
}
@Override
public IBinder onBind(Intent intent) {
return binder;
}
public class ServiceBinder extends Binder {
public NetworkService getService() {
return NetworkService.this;
}
}
}
然后是这样的开始活动:
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;
}
};
}
每个其他Activity
都具有相同的绑定/取消绑定功能和相同的ServiceConnection
。据我所知,这使我的应用程序不会泄漏服务连接。但我的印象是我在这里引入了很多开销。怎么做
感谢所有花时间回答的人:)