因此一直以來,Fragment 處於一種很尷尬的地位,API 難用、坑不少、生命週期難管理,因此當初有人提出 Activity 應該採起單 Activity + 多 Fragment 的結構開發時,不少人都持否認態度,不過最近 Google Play 也改爲了這種結構,平常使用體驗也還好。markdown
不過自從 Android 平板上夭折以後,Fragment 的做用愈來愈向一個微型 Activity 發展,Activity 有什麼方法 Fragment 中就要對應添加什麼方法,發向 Activity 的事件回調也要向 Fragment 中發一遍。最初的想法是想 Fragment 解決 Activity 頁面臃腫以及不靈活的問題,可是沒想到現在 Fragment 變成了 Activity。框架
針對目前存在的問題,官方提出了從新設計 Fragment 的計劃,並提出瞭如下兩個目標:測試
將 Fragment 遷移到一個聚焦 API 層面的世界,並具備可預見、完善的表現。優化
兼容目前的功能動畫
在將來的某個時間的,Google 會發布 Fragment 2.0,會添加一些新的 API 供你們使用,因此做爲開發者的咱們,須要密切關注正在使用的 Fragment API 中哪些被打上了棄用的標籤,由於在 Fragment 2.0 發佈以後,這些 API 會逐步變得不可用。spa
在目前的 1.1.0 版本中,還提供了 FragmentFactory 幫助咱們自定義 Fragment 的實例化。以前咱們可能會有一個疑問:爲何 Fragment 須要使用 setArguments 來傳遞參數,而不能夠直接從 Fragment 的構造方法傳遞參數?答案很簡單,會數據丟失。設計
由於例如當咱們反轉屏幕的時候,Activity 會銷燬重建,當前 Activity 持有的 Fragment 會經過 FragmentManager 重建,但 FragmentManager 只會調用 Fragment 默認的構造方法重建,因此咱們經過自定義構造方法傳遞的參數就會丟失。3d
如今咱們能夠經過 FragmentFactory 來自定義的實例化,就能夠避免上述問題的發生。code
自定義 FragmentFactory 以後,須要在 onCreate 以前給 FragmentManager 提早賦值。orm
在 Fragment 1.2.0 版本中,增長來新的 FragmentContainerView 來替代以前使用的 和 標籤。FragmentContainerView 在 Fragmnet 出現、消失的動畫上面增長了 Z 軸上的效果。
最後官方還指望能夠整合 Fragment 和 Fragment‘s View 的生命週期,提供更方便的狀態管理。
其實在我看來以前 Fragment 之因此難用,是由於當時設計它的緣由是基於平板模式所設計的,現在 Google 移除來 support 引入來全新的 AndroidX,將主要 API 的更新脫離 Android 版本的更新,勢必會加快 API 的更新迭代速度,向着更快、更方便的開發體驗前進,並且我也預感 Android 會在將來 1-2 年內會有重大的變化和突破,能夠提供給用戶媲美 iOS 的使用體驗。因此抓緊上車,學就對了!
明天週末暫停更新,下週一咱們繼續爲你們分享 Android Dev Summit 中有趣的內容!沒關注的小夥伴記得關注我以及個人公衆號【Android丨Kotlin】!若是以爲這些文章有點意思,記得分享轉發評論點贊鴨!
我是 wanbo 你們加油!