#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.