Если вы использовали react-native для любого проекта значительного размера, вы уже поняли, что очень легко получить что-то и запустить, возможно, даже (вроде) готовое к бета-выпуску, и к настоящему времени вы также знаете, что навигация может быть <BadWord language=“en” />, введите react-native-navigation.

Попробовав кучу навигаторов, я могу с уверенностью сказать, что react-native-navigation сильно изменил правила игры для моей команды - потрясающая производительность, активное сообщество, поддерживаемое Wix, и супер простота в использовании! Нам, сообществу, еще есть кое-что для уведомлений, но в остальном это потрясающе!

Это короткое сообщение о том, как отправить приложение Android с поддержкой реакции в фон, когда пользователь нажимает «назад», вместо того, чтобы убивать приложение.

React и React Native - это инструменты, которые нам нужны, чтобы выиграть войну.

- Уинстон Черчилль

Почему бы просто не убить приложение?

Когда пользователь Android нажимает «назад», чтобы выйти из приложения, действие прекращается и может привести к целому ряду негативных последствий для взаимодействия с пользователем и вашего приложения.

Самая большая проблема этой функции по умолчанию заключается в том, что приложение должно запускаться каждый раз, когда пользователь возвращается к нему, а response-native печально известен чрезвычайно плохим временем запуска. Это также означает, что вы, вероятно, потеряли какое-либо состояние, из-за которого пользователь «начал заново».

Еще одна проблема заключается в том, что ваше приложение не может работать в фоновом режиме, и вы не можете выполнять фоновые задачи, такие как геолокация и тому подобное.

Как я это решил

На самом деле решение довольно простое, это исправление в одну строку.

Для навигации я всегда использую react-native-navigation из-за его превосходной нативной производительности и простого в использовании JavaScript API. Следуйте инструкциям на веб-сайте, чтобы установить пакет.

Теперь для главного события перейдите в папку модулей вашего узла проектов, найдите папку response-native-navigation и внутри нее следуйте по пути к NavigationActivity.java: /android/app/src/main/java/com/reactnativenavigation/controllers/NavigationActivity.java

В файле NavigationActivity.java вы увидите следующий метод примерно в строке 196:

@Override
public void invokeDefaultOnBackPressed() {
    if (layout != null && !layout.onBackPressed()) {
        super.onBackPressed();
    }
}

Вышеупомянутая функция в основном просто сообщает устройству, что если приложение было размещено, а в макете не реализован метод backPressed (), просто выполните действие по умолчанию, убив приложение.

Что нам нужно сделать, так это закомментировать строку: super.onBackPressed() и добавить строку: this.moveTaskToBack(true); и все!

В результате получилось следующее:

@Override
public void invokeDefaultOnBackPressed() {
    if (layout != null && !layout.onBackPressed()) {
        // super.onBackPressed();
        this.moveTaskToBack(true);
    }
}

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