2016-01-04 28 views
1

我對Retrofit2回調和onSaveInstanceState存在疑問。我想保存兩個變量的狀態,var1var2 in onSaveInstanceState。這兩個變量(實際上不是簡單變量)在onResponse方法中的Retrofit回調中取值。它只持續幾毫秒,但如果我在兩個變量在onResponse應用程序崩潰中獲取其值之前旋轉設備。我不太清楚如何解決這種情況。我想知道你的方法,以避免崩潰(實際上我有2個改造回調,它們彼此獨立,一個用於繪製圖形,另一個用於在文本視圖中顯示數據)。預先感謝併爲我糟糕的英語語言技能找藉口。Retrofit回調和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是空值。

更重要的是 - 我建議你考慮一下你的客戶服務器設計。你在UI類中使用回調函數和改進的調用 - 這是一種壞方法,因爲它會導致內存泄漏,並且很難管理生命週期。考慮使用裝載機或服務,它會更好,也更容易。

P.S.當你崩潰時,總是提供堆棧跟蹤。

+0

感謝您的回答。因爲我沒有使用數據庫,所以我不能使用裝載機。通過服務,我想你的意思是IntentService,我以前認爲它,但我不明白使用服務的好處,我仍然需要將服務的結果保存在變量中,並在onSaveInstanceState中使用它,如果用戶旋轉屏幕之前,服務完成我會有同樣的問題,我不? –

+1

您也可以使用沒有數據庫的裝載機。使用LoaderManager的加載器需要關心Activity/Fragment的生命週期。您只需在加載器onForLoad方法和改進回調調用deliverResult中發送請求。活動重新啓動時,所有數據都不會被銷燬。 您可以使用Service(通常的Service或IntentService - 無關緊要)實現同樣的功能,但檢索結果會更困難。 Otto/EventBus作爲可能的變體。 –