Подключение и отключение сокетов в Android

#android #sockets

#Android #сокеты

Вопрос:

я делаю небольшое приложение для чата в Android с помощью socket.. Я хочу приложение таким образом, чтобы сокет подключался, когда мы открываем приложение, и он должен отключаться, как только пользователь покидает приложение .. и главное, он должен быть подключен, когда пользователь выполняет какое-либо действие в приложении (например: профиль, создание групп или любое действие, отличное от страницы беседы) Как то же самое в WhatsApp и подобном приложении для чатов .. Как этого можно достичь? заранее спасибо

Ответ №1:

Мой трюк, и я уверен, что есть и другие, заключается в создании абстрактного BaseActivity со счетчиком активности и создании экземпляров всех «реальных» действий из этого класса:

 abstract class BaseActivity extends Activity {

   protected static int numForegroundActivities;


    @Override
    public void onStart() {
        super.onStart();
        numForegroundActivities  ; // no need for thread sync
   }


    @Override
    protected void onStop() {
        super.onStop();
        if (--numForegroundActivities == 0) {
            doAppClosedCode(); // <----------------------------
        }
    }    
}




// all instantiable activities should extends BaseActivity
class MainActivity extends BaseActivity ....
  

Надеюсь, это поможет.

Комментарии:

1. Немного лучше делать это с помощью ActivityLifecycleCallbacks (см. Мой ответ), поскольку вам не обязательно, чтобы вся ваша активность расширяла базовый класс.

2. Вы правы, если бы BaseActivity использовался только для подсчета активности. В большинстве нетривиальных проектов это не так. Я обнаружил, что использую это для более общей логики пользовательского интерфейса.

Ответ №2:

Вы можете отслеживать, когда действия находятся на переднем плане, используя этот api:

Обратные вызовы Application.registerActivityLifecycleCallbacks

Действие находится на переднем плане при вызове onActivityStarted.