開發Android應用程序時,我構建了一個包含進度條的活動。 有一個異步任務將更新活動中的進度欄。屏幕方向更改後,異步任務仍在進行時不再更新進度欄。我相信異步任務不會引用在Android屏幕方向更改後調用onCreate方法時創建的新進度欄實例。Android進度條在屏幕方向更改後不更新
欣賞是否有人能告訴我任何提示。
謝謝。
開發Android應用程序時,我構建了一個包含進度條的活動。 有一個異步任務將更新活動中的進度欄。屏幕方向更改後,異步任務仍在進行時不再更新進度欄。我相信異步任務不會引用在Android屏幕方向更改後調用onCreate方法時創建的新進度欄實例。Android進度條在屏幕方向更改後不更新
欣賞是否有人能告訴我任何提示。
謝謝。
你正確的,你的AsyncTask不知道活動的新實例作爲活動被摧毀,方向變化時重新創建。
但是,有一個它被調用時,方位的變化,哪些是你可以使用到的AsyncTask傳遞給新的活動方式。
onRetainNonConfigurationInstance()前的活性被破壞,覆蓋的方法,並返回正在運行的AsyncTask的參考被調用。在onCreate()方法中,您可以通過調用getLastNonConfigurationInstance()來檢索AsyncTask。請注意,您必須處理第一次創建活動的情況,並且getLastNonConfigurationInstance()將返回null。
此外,您必須將您的活動傳遞給AsyncTask,以便它可以引用當前活動的進度條。因此,我建議實施兩種方法來註冊和註銷AsyncTask的活動。因此,在onRetainNonConfigurationInstance()中,註銷將被銷燬的「舊」活動,並在onCreate中將新創建的活動註冊到新的AsyncTask或從getLastNonConfigurationInstance()中檢索的活動。
您是否可以更新您的答案以反映@SuperStubbs提供的關於這不是解決問題的可靠方法的新信息。 –
從的AsyncTask可能,而不是直接引用的進度,你可以在活動的方法中更新進度。例如。
onPublishProgress(int progress) {
updateProgressBar(progress);
}
的活動:
updateProgressBar(int progress) {
progressBar.setProgress(progress);
}
您可以保存活動的狀態之前,通過覆蓋毀壞的onSaveInstanceState()。 保存進度整數在這裏,然後在onCreate, 檢查savedInstanceState是否爲空,然後創建設置在保存的整數的進度條。
我知道這是舊的,事情可能已經改變,但弗洛的答案不應該被接受。每文檔瀏覽:onRetainNonConfigurationInstance()
「這個功能純粹是被稱爲優化,你必須不依賴於它被稱爲」。
換句話說,如果你正在做的事情很重要,當活動被銷燬「東西」一定會發生,這是一個壞的解決方案。
一個更好的解決辦法是使用onSaveInstanceState(Bundle outState)
這裏找到:onSaveInstanceState (Bundle outState)
你打電話findViewById()一次,也許能給你的方向變化後的陳舊參考? – mah
>我相信異步任務不是引用新的進度條實例 - 它不應該。你應該手動做這一切。 –
你應該接受答案和/或投票。 –