2016-01-04 3 views
1

У меня есть сомнения относительно обратного вызова Retrofit2 и onSaveInstanceState. Я хочу сохранить состояние двух переменных: var1 и var2 в onSaveInstanceState. Эти две переменные (на самом деле не простые переменные) принимают свои значения в обратном вызове в методе onResponse. Он длится всего миллисекунды, но если я поворачиваю устройство до того, как две переменные получат свои значения в onResponse, авария приложения. Я не очень хорошо знаю, как справиться с этой ситуацией. Я хотел бы знать ваши подходы к этому, чтобы избежать сбоя. (На самом деле у меня есть 2 модифицированных обратных вызова, они независимы друг от друга, один для рисования графического изображения, а другой для представления данных в текстовых изображениях). Заранее благодарим и извиняюсь за мои плохие навыки владения английским языком.Модифицированные обратные вызовы и saveinstanceState

@Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putInt("var1",var1); 
     outState.putInt("var2",var2); 

    } 

    retrofitcallback() { 
     return new Callback<T>() { 
        public void onResponse() { 
         var1=... 
         var2=... 
        } 
        public void onFailure() { 
        } 
     }; 
    } 

ответ

0

Во-первых, приложение может выйти из строя, поскольку var1 и var2 являются нулями.

И что более важно - я предлагаю вам подумать о своем дизайне клиент-сервер. Вы используете обратные вызовы и перенастраиваете вызовы в интерфейсах пользовательского интерфейса - это плохой подход, поскольку он приводит к утечке памяти, и вряд ли можно управлять жизненным циклом. Подумайте о том, чтобы использовать загрузчики или услуги, было бы намного лучше, а также проще для вас.

P.S. При сбое приложения всегда предоставляйте стек.

+0

Спасибо за ваш ответ. Я не могу использовать загрузчики, так как я не использую базу данных. По слухам, я полагаю, что вы имеете в виду IntentService, я думал об этом раньше, но я не очень хорошо понимаю преимущества использования службы, мне все равно нужно сохранить результат службы в переменной и использовать ее в onSaveInstanceState, и если пользователь поворачивает экран до завершения обслуживания, у меня будет такая же проблема, не так ли? –

+1

Вы также можете использовать загрузчики без базы данных. Погрузчики с LoaderManager заботятся о жизненном цикле Activity/Fragment. Вы просто отправляете запрос в метод loader onForceLoad и в обратном вызове обратного вызова deliverResult. Все ваши данные не будут уничтожены при перезапуске активности. То же самое, чего вы можете достичь с помощью Сервиса (обычный сервис или IntentService - не имеет значения), но получить результат будет сложнее. Otto/EventBus как возможные варианты. –

Смежные вопросы