Threading and Loaders
當啟動工作線程的Activity被銷毀的時候,我們應該做點什麼呢?為了方便的控制工作線程的啟動與結束,Android為我們引入了Loader來解決這個問題。我們知道Activity有可能因為用戶的主動切換而頻繁的被創建與銷毀,也有可能是因為類似屏幕發生旋轉等被動原因而銷毀再重建。在Activity不停的創建與銷毀的過程當中,很有可能因為工作線程持有Activity的View而導致內存洩漏(因為工作線程很可能持有View的強引用,另外工作線程的生命週期還無法保證和Activity的生命週期一致,這樣就容易發生內存洩漏了)。除了可能引起內存洩漏之外,在Activity被銷毀之後,工作線程還繼續更新視圖是沒有意義的,因為此時視圖已經不在界面上顯示了。
Loader的出現就是為了確保工作線程能夠和Activity的生命週期保持一致,同時避免出現前面提到的問題。
LoaderManager會對查詢的操作進行緩存,只要對應Cursor上的數據源沒有發生變化,在配置信息發生改變的時候(例如屏幕的旋轉),Loader可以直接把緩存的數據回調到onLoadFinished()
,從而避免重新查詢數據。另外系統會在Loader不再需要使用到的時候(例如使用Back按鈕退出當前頁面)回調onLoaderReset()
方法,我們可以在這裡做數據的清除等等操作。
在Activity或者Fragment中使用Loader可以方便的實現異步加載的框架,Loader有諸多優點。但是實現Loader的這套代碼還是稍微有點點複雜,Android官方為我們提供了使用Loader的示例代碼進行參考學習。