Я сделал приложение на Android, в котором у меня есть TCP-клиент, но теперь я хочу отправить сообщение на сервер только тогда, когда приложение будет закрыто, я пытались добавить действие openConnection
(открытие соединения с TCP-клиентом) и sendMessage
(отправка сообщения на TCP-сервер) в метод onDestroy, но это не сработало. TCP-клиент, который я использовал, описан в этом руководстве, на самом деле мне нужно отправить это сообщение для сообщите серверу, что связь с устройством закрыта, и отправьте сообщение «Устройство отключено», а затем просто закройте приложение.
Как я могу что-то сделать до закрытия приложения?
Ответы (3)
Способ 1. Для этого можно использовать ActivityLifecycleCallbacks. Ниже приведен пример с некоторыми журналами.
public class MyApplication extends Application {
private static final String TAG = MyApplication.class.getSimpleName();
private int mVisibleCount;
private boolean mInBackground;
@Override public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override public void onActivityStarted(Activity activity) {
mVisibleCount++;
if (mInBackground && mVisibleCount > 0) {
mInBackground = false;
Log.i(TAG, "App in foreground");
}
}
@Override public void onActivityResumed(Activity activity) {
}
@Override public void onActivityPaused(Activity activity) {
}
@Override public void onActivityStopped(Activity activity) {
mVisibleCount--;
if (mVisibleCount == 0) {
if (activity.isFinishing()) {
Log.i(TAG, "App is finishing");
} else {
mInBackground = true;
Log.i(TAG, "App in background");
}
}
}
@Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override public void onActivityDestroyed(Activity activity) {
}
});
}
public boolean isAppInBackground() {
return mInBackground;
}
public boolean isAppVisible() {
return mVisibleCount > 0;
}
public int getVisibleCount() {
return mVisibleCount;
}
}
Метод 2. Существует еще один метод, использующий Службу для определения того, завершено ли приложение. См. ссылку.
Log.i(TAG, "App is finishing");
- person santalu; 19.07.2017
Следующий вызов метода при различном действии
Сверните приложение с помощью кнопки «Домой» -> это вызывает
при паузе() при остановке()
Удалить приложение из диспетчера задач ->
затем для этой MainActivity (пусковой установки) вызывается onDestroy().
Итак, сделайте родительскую активность с именем BaseActivity и переопределите ее методы onPause(), onDestroy() и onStop() и вызовите свою реализацию отсюда, а затем расширьте эту активность из других ваших действий.
Вы не должны полагаться на метод onDestroy. Согласно официальной документации Android, он не всегда вызывается.
Попробуйте поместить тот же код в метод onStop() вашей активности.
Кроме того, у вас может быть родительское действие, которое расширяется всеми другими действиями.
Затем вы можете переопределить методы onPause() и onStop() в ваших конкретных дочерних действиях и обрабатывать определенные сценарии.
onDestroy
, служба останется, даже если приложение выйдет из строя... - person xpto   schedule 19.07.2017