但是,如果我的應用程序被暫停或停止並重新啓動或重新開始呢? pageradapter中所有頁面的通貨膨脹是否被刪除?做 我必須再次刷新所有頁面?
如果應用你的意思是Activity
,當暫停這只是意味着它不是聚焦Activity
現在。所有的州仍然存在。這基本上意味着你不能接受任何前景事件,直到onResume()
。如果操作系統決定調用onSaveInstanceState()
,則可以實際存儲諸如實例變量的值或僅用於新實例讀取的標誌的內容。雖然你不能在這裏存儲複雜的東西。因此,例如Thread
或Cursor
實例將不合適。基本上任何不是「數據」的東西。
在活動被破壞甚至被殺害的過程,然後是你將需要重新綁定和reinflate一切情況。然而,這樣的美麗,在大多數情況下,你不必做任何特別的事情。只有在您可能寫入onSaveInstanceState()
的捆綁包的情況下,您才需要做一些額外的工作。
是我的內部狀態恢復即我的變量值,sqlLite數據庫,文件內容。
如果過渡只在onPause和onResume之間,那麼是。一切都應該沒問題。如果發生銷燬或進程終止,則活動將以onCreate()
重新啓動,並且必須根據Bundle savedInstanceState
重置所有狀態。我將在晚些時候處理sqlite和文件。
是我的小工具中恢復的值,即文本框中的字符。
通常,如果他們saveEnabled(true)
(大部分做)和TextView
有一個freezesText物業,這將使他們記住最後文本對他們設置。但是,大多數情況下,如果您在onSaveInstanceState()
調用期間正確保存您的狀態,則很可能您不僅將狀態存儲在UI中,而且還存儲其他方法。在這種情況下,你可能也同步他們當你去通過未來onCreate()
如何防止腐敗,如果暫停或停止可以在 中的for循環或代碼塊發生呢?
因此onPause()
和onStop()
發生在主UI線程上。如果您當前正在UI線程上運行代碼,則必須先完成這些其他回調才能發生。如果您正在其他線程上運行,那麼您必須嘗試在UI線程上完成任務完成的輸出。它簡化了很多。
殺死另一方面,可能會發生。儘管當我們談論腐敗時,這通常會影響程序內存之外的事情。就像你打開文件句柄或打開sqlite光標或打開網絡套接字一樣。這樣,你必須在使用之前檢查狀態。
即
- 確保目錄是否真的存在你讀或寫他們
- 確保文件的內容是正確寫入之前(簡單預期的檢驗和通常在這裏工作或版本的元數據)之前, 。
- 在使用sqlite時使用事務,以確保您只用完整的原子塊將數據寫入表中,這樣您就不會有其他表中不存在行的表引用行。
- 網絡連接將被重置,並且類似您的網絡協議選擇應該照顧您的理智檢查,以及正在連接的應用程序。
希望這可以幫助,雖然它不完全,但它是一個很好的開始方法。
感謝格雷格您的非常完整的答案。 –