今天美好的大半天又碌,都獻給了上面的家伙岸蜗。
基本上尉咕,出現(xiàn)這個問題主要有 2 個原因:程序閃退、內(nèi)存超限散吵。
程序閃退龙考,看似是程序本身的問題蟆肆,但實際上和 Today Widget 的生命周期有關(guān)。Today Widget 基本上是個很弱的家伙晦款,或者說炎功,盡量少的在 Today Widget 中做事情、盡量避免后臺任務(wù)缓溅,尤其是蛇损,和 UI 相關(guān)的后臺任務(wù)。因為坛怪,當后臺任務(wù)終于忙完淤齐、要更新 UI 時,可能 UI 已經(jīng)被系統(tǒng)釋放了袜匿,這里自然就閃退了更啄。
內(nèi)存超限方面:
- 內(nèi)存上限是多少呢?這個蘋果并沒有官方文檔說明居灯。從網(wǎng)上搜到的資料祭务,多數(shù)說是總內(nèi)存的 1%,比如對于 iPhone 6 是 10 MB怪嫌,很小的值义锥。僅供參考。
- 在我這邊岩灭,最直接就是 Core Data 造成的拌倍。Core Data 在內(nèi)存使用方面是很慷慨乃至濫用的。只要一啟動噪径,就占用 4+ MB 內(nèi)存柱恤,很大了。另外熄云,Core Data 的內(nèi)存對象釋放機制也很不明確膨更,我試了網(wǎng)上找的很多所謂優(yōu)化,并沒有很明顯的下降缴允;還有很多人通過測試驗證 Core Data 有 Bug
- 還是后臺任務(wù)方面荚守。其中我有一個操作:從 CloudKit 下載數(shù)據(jù)。這在大部分情況下都是沒有問題的练般。但矗漾,在程序最開始運行時,會從網(wǎng)絡(luò)下載大量數(shù)據(jù)薄料,這時程序就崩潰了敞贡。
關(guān)鍵的,一旦 Today Widget 崩潰摄职,基本很難恢復(fù)(對于我的程序而言)誊役,基本只能靠重啟手機來重置获列。一旦用戶發(fā)生此類問題,會非常難受蛔垢。折騰了很久击孩,我也沒有很好的解決這個問題,只是盡量降低出現(xiàn)的概率鹏漆,繼續(xù)觀察吧巩梢。