在我正在开发的应用程序中,有一个绑定服务,它使用TCP套接字连接。对服务的要求是在最后一次绑定到服务的Activity关闭后保持套接字连接一段时间,比如1分钟。这是为了避免在另一个活动刚刚从服务中取消绑定后连接到服务时不需要的套接字重新连接。
我搜索过并发现类似的问题(Service, Rebind or not bound at all?)建议使用启动服务,但是当前的应用程序架构使用绑定连接,如果不需要,我不想重新设计。因此,我正在寻找其他选择。
我的问题是,我能否以某种方式推迟绑定服务销毁,或者唯一的好方法是使用意图重写与服务的通信,从而将其转换为已启动的服务?
public class SocketService extends Service {
private static final String LOG_TAG = SocketService.class.getSimpleName();
@Override
public final IBinder onBind(final Intent intent) {
Log.d(LOG_TAG, "onBind()");
return new LocalBinder<SocketService>(this);
}
@Override
public boolean onUnbind(Intent intent) {
Log.d(LOG_TAG, "onUnbind");
return super.onUnbind(intent);
}
@Override
public void onCreate() {
Log.d(LOG_TAG, "onCreate");
// create socket connection here
// ...
//
super.onCreate();
}
@Override
public void onDestroy() {
Log.d(LOG_TAG, "onDestroy");
// close socket connection
// ...
//
super.onDestroy();
}
// Other socket sending and receiving logic
// ...
//
}
先谢谢你的时间。
答案 0 :(得分:0)
保持您启动的第一个活动绑定到服务,不要在启动另一个时销毁它。
如果要从当前活动中退出应用程序,请向服务发送信号,该信号将通知所有要关闭的活动。
仅在第一次绑定服务时调用OnCreate(当服务不存在时),后面的绑定不应该触发onCreate函数。