Связанное обслуживание и тайм-аут - PullRequest
0 голосов
/ 28 декабря 2011

В приложении, которое я разрабатываю, есть связанная служба, которая использует соединение через сокет TCP. Требование к службе - поддерживать сокетное соединение некоторое время после завершения последней активности, связанной со службой, скажем, в течение 1 минуты. Это сделано для того, чтобы избежать ненужных переподключений сокетов, когда другое действие подключается к сервису сразу после того, как одно было отсоединено от него.

Я искал и обнаружил похожую проблему ( Служба, перепривязать или вообще не привязана? ), предлагающую использовать запущенную службу, но в текущей архитектуре приложения используются связанные соединения, и я не хотел бы перепроектировать, если не нужно. Поэтому я ищу другие варианты.

У меня вопрос, могу ли я как-то отложить уничтожение связанной службы, или единственный хороший способ - переписать связь с услугой, используя намерения, преобразовав ее, таким образом, в запущенную службу?

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
    // ...
    //
}

Заранее спасибо за ваше время.

1 Ответ

0 голосов
/ 28 декабря 2011

Сохраняйте первое действие, которое вы запускаете, привязанным к сервису, не уничтожайте его, когда вы запускаете другое.

Если вы хотите выйти из приложения из текущей активности, отправьте в службу сигнал, который уведомит все действия о закрытии.

OnCreate вызывается только при первой привязке к службе (когда служба не существует), следующая привязка не должна вызывать функцию onCreate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...