#android #retrofit2 #okhttp #okhttp3
#Android #retrofit2 #okhttp
Вопрос:
Я хочу иметь возможность восстановиться после сбоя / закрытия приложения или просто отключения устройства.
В настоящее время, когда я обнаруживаю, что сеть отключена для моего устройства Android, я сохраняю вызов, созданный с помощью RetroFit2, в стеке (для последующей обработки). Если пользователь закроет приложение или перезагрузит устройство, я потеряю возможность сохранять эти вызовы где угодно…
Мой вопрос заключается в следующем, как я могу сохранить вызов RetroFit или запрос OkHttp3? Ни один из них не является сериализуемым, и я не могу преобразовать их в строки из того, что я мог видеть, просматривая код.
Ответ №1:
Используйте приоритетную очередь заданий для Android от Йигита Бояра (одного из разработчиков Google Android). Он будет упорядочивать ваши задания, обнаруживать изменения в сети (и реагировать соответствующим образом) и сохраняться даже при перезагрузке устройства (не говоря уже о сбоях приложений). Плюс множество других функций. Просто взгляните. Это не совсем то, что вы просили, но это лучшее решение. Это волшебство.
Начиная с версии v2, очередь заданий может быть интегрирована с JobScheduler или GcmNetworkManager. Эта интеграция позволяет очереди заданий запускать приложение на основе критериев заданий, которые у него есть. Вы можете увидеть deatails на соответствующей вики-странице. API планировщика является гибким, так что вы можете реализовать его пользовательскую версию, если на вашем целевом рынке нет сервисов Google Play.
Попробуйте, и вы будете рады, что сделали, как и я. Это заполнило огромный пробел в моем коде, который я неделями взламывал вместе с spit, ducktape и faith.
Комментарии:
1. Спасибо, Элвис, я не видел, как это восстановится после сбоя приложения, хотя, у вас есть какие-либо указания относительно того, будет ли это работать или нет?
2. Я восстанавливаюсь после сбоев приложения и даже перезагружаю телефон от моего использования. Что он делает, так это подключается к GcmNetworkManager (службы Google Play) или JobScheduler фреймворка ( d.android.com/reference/android/app/job/JobScheduler.html ), которые запускают приложение и, следовательно, диспетчер заданий, выполняя любой код, который вы запланировали для выполнения.
3. Если службы Google Play и / или JobScheduler не выйдут из строя и не смогут перезапустить (никогда не произойдет, если ваш телефон не взорвется — глядя на вас, примечание 7), запланированная задача будет выполнена.
4. Звучит неплохо, я проверю это и проверю ваш ответ, если он сработает. Спасибо!
5. Я отмечу ваш ответ как правильный. Однако это напрямую не решает реальную основную проблему, которая заключается в сериализации запроса POST / GET / Whatever сама по себе. Я не нашел такого решения.