2015-07-12 39 views
4

這是怎麼發生的?我在一個片段使用RecyclerView和片段自身實現我的點擊收聽...點擊此處可導致IllegalStateException

有時候,單擊列表中的結果項中以下錯誤:

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 

怎麼能這樣呢?點擊應該同步轉發到他們的處理程序,這應該不會發生,如果它?

+2

你有一些代碼? –

+0

我不知道要發佈什麼。這非常罕見,以上僅僅是一個例子......它發生在像MaterialDialog庫這樣的庫中,它發生在非常簡單的片段中,當我點擊一個按鈕時......我有10萬用戶,這種錯誤只發生在每一個5天左右... – prom85

回答

0

一些代碼片段真的有幫助。但是,您的錯誤已經顯示Can not perform this action after onSaveInstanceState

這意味着在函數onSaveInstanceState()被調用後,您嘗試執行某些操作。將該代碼放在onSaveInstanceState()之前,並且您的可能會有的解決方案。

+0

OnSaveInstanceState是生命週期的一部分。按鈕點擊是在片段啓動時發生的事件的結果,並且按鈕點擊應該同步處理,因此它不應該與onSaveInstanceState產生問題... – prom85

+0

是的,它是生命週期的一部分,在之前被調用onDestroy()以便在需要時保存任何未完成的工作。正如你所說,它永遠不應該成爲一個問題,這一直是我的情況。如果你編輯你的問題並添加一些代碼,那麼也許我(或其他人)可能會看到這個問題。 – guicor

+0

實際上,我不知道要發佈什麼代碼...在我的主要問題下閱讀我的評論...這種情況偶爾會發生,實際上,我想知道我是否可以100%確定,如果我點擊一個按鈕,按鈕點擊處理程序中的所有事件都會在暫停,銷燬和保存片段之前執行,並且它必須是在我的代碼中的一個錯誤... – prom85

0

當活動即將被銷燬時,OnSaveInstance被調用。

android最後一次嘗試將所有數據保存在一個捆綁包中,當在activityRestoreInstance上重新創建活動時,該捆綁包可以被回收。

大多數情況下,當android由於缺乏內存而決定垃圾收集您的活動時,會發生這種情況。

在onSaveInstance被調用之後,您正在UI -fragment上做一些工作的錯誤狀態。

在調用這個片段後,Android不允許對片段進行任何工作,並且很快會調用onDestroy。

因此,請在做任何工作之前重溫您的邏輯或進行isFinishing()檢查。

0

事實上,這是因爲你的活動由於內存不足而被破壞,並且在它被破壞之前它也保存了片段狀態,並且像你提到的那樣發生了異常,在這期間你可能點擊了你自己的嘗試調用該先前的狀態不點擊被銷燬的片段。 你怎麼能避免它 使用齊射和畢加索。並檢查你的應用程序的哪一部分使用android studio中給出的內存監視器使用更多的內存。 另外,如果您無法減少內存使用量,請考慮添加。

一大堆=在 「真」

您的清單

相關問題