All streams
Search
Write a publication
Pull to refresh
2
0
sl1mmer @sor4ed

User

Send message

Интересная идея для проекта! Если планируете работать над ним дальше, то вот вам несколько проблем, которые я заметил при прочтении:

1) Тост ошибки — это событие, а не состояние.

Попробуйте запустить проект с нуля без разрешения на впн, вызвать ошибку и потом переворачивать экран туда-сюда. Тост будет показываться снова и снова и снова.

Это происходит потому, что лайвдата отсылает своё последнее значение каждому новому наблюдателю, т.к. уничтожаются/регаются новые после поворота экрана.

2) При вызове suspend функций из api для ретрофита не нужно использовать Dispatchers.IO, у ретрофита свои диспатчеры, отвечающие за сетевые запросы

3) Вместо AtomicBoolean флага isRunning я бы рекомендовал посмотреть на свойство isActive у корутины, что, по идее, вам и нужно

4) Будьте аккуратны с использованием try/catch в контексте корутин, т.к. можно случайно поймать исключение, которое позволяет им отменяться (CancellationException). У вас они вручную не отменяются, но на всякий случай упомяну. Чтобы избежать такой проблемы, можно вызывать в корутине coroutineContext.ensureActive(), или просто пробрасывать дальше пойманное исключение, если это CancellationException.

В общем, это базовые проблемы, которые не особо касаются впн, но на которые стоит обратить внимание при разработке.

Information

Rating
Does not participate
Registered
Activity

Specialization

Mobile Application Developer
Middle