Рецепты
События, ошибки и жизненный цикл Entry
Наблюдение без зависимости от Controller, единая обработка неожиданных ошибок и освобождение ресурсов конкретного Entry.
События, ошибки и жизненный цикл Entry
Записать запросы и решения политик
Реализуйте NavigationEventSink. События Requested, Redirected, GuardRejected, Committed и Failed имеют общий NavigationRequestId.
final class AnalyticsNavigationSink implements NavigationEventSink {
@override
void add(NavigationEvent event) {
analytics.record(event.runtimeType.toString());
}
}
Отказ Guard — ожидаемое решение приложения, а не сбой.
Централизовать непредвиденные ошибки
Создайте один NavigationFailureSink рядом с кодом, который запускает NavigationSession или NavigationRuntime. Подключите его к Ark Error Manager, Sentry или уже используемой системе отчётов. Он получает объект ошибки, stack trace, ID запроса и выполненную операцию.
Управлять ресурсом одного Entry
Используйте NavigationLifecycleObserver, если подписка или controller принадлежат одному конкретному появлению страницы. Храните ресурсы по NavigationEntryId: один Route может присутствовать в стеке несколько раз.
Освобождайте ресурс при pop, замене, удалении, сбросе ветви, повторном применении политики и миграции Graph.
Не расширять зависимости функционального кода
Страницам и Presenter достаточно NavigationPort. Полные объекты Session и Controller нужны только коду запуска, диагностике, восстановлению и адаптерам жизненного цикла.