成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Fragment的陷阱

移動開發 Android
現在主流的APP都會使用到Fragment,相信你也一定使用過,今天為大家介紹一下我曾經踏過的一個關于Fragment的坑。

現在主流的APP都會使用到Fragment,相信你也一定使用過,今天為大家介紹一下我曾經踏過的一個關于Fragment的坑。

以前做過的一個項目,Fragment嵌套高德地圖,當再次進入Fragment的時候,會出現奇怪的現象。嵌套的地圖會出現滑動不動的情況,起先還以為是高德的bug呢,經過一番研究,終確定這是一個坑。

先對Fragment做一個簡單的介紹,借用csdn上朋友寫的一段內容。

Android在3.0中引入了fragments的概念,主要目的是用在大屏幕設備上--例如平板電腦上,支持更加動態和靈活的UI設計。平板電腦的屏幕要比手機的大得多,有更多的空間來放更多的UI組件,并且這些組件之間會產生更多的交互。Fragment允許這樣的一種設計,而不需要你親自來管理 viewhierarchy的復雜變化。 通過將activity的布局分散到fragment中, 你可以在運行時修改activity的外觀,并在由activity管理的back stack中保存那些變化。

使用過Fragment的同學都知道,它的使用相當的簡單,基本上和Activity中一樣,就是生命周期函數稍稍多了點。今天不是介紹Fragment如何使用,而是介紹一個Fragment中的一個坑。現在相當多的APP都有以下三種設計風格。

一、底部TAB,一般3-5個,點擊某個TAB,上面頁面也隨之切換,如QQ、騰訊微博、新浪微博。早期的時候Android開發者們都會使用TabActivity去實現,但是TabActivity存在一些問題,也不符合Andoid的單窗口設計的原則,所以已經被廢棄,不推薦大家繼續使用。如有業務需求,請優先考慮使用Fragement。

二、頂部TAB,一般也是3-5個左右,相對于底部TAB風格,頂部TAB一般會引入ViewPager + Fragment的實現方式,這樣可以做到左右切換,如微信。

三、側邊TAB,也就是SlidingMenu + Fragment或者MenuDrawer + Fragment。這種風格自去年起,風靡的一發不可收拾,前段時間干貨分享講的一期就是這個,代碼也開源在了Github上,有興趣的朋友可以下載了解下。出門右轉,查看歷史消息《一個比較酷的項目界面分享,干貨十足》。

上述三種風格中使用到的Fragment,一般很容易會被大家忽略了一個問題。那就是當和Fragment關聯的view hierarchy正在被移除時,不會執行onDestroy()方法,而是會調用onDestroyView()。比如上述的風格二ViewPager + Fragment,默認情況下當ViewPager滑動到第三頁的時候,***頁的Fragment就會執行onDestroyView,當再次滑動到第二頁的時候,***頁的Fragment的onCreateView又會重新執行繪制頁面。伴隨而來的問題就是成員變量要重新賦值一次,辛苦耗時加載出來的頁面又要重新加載一次,這樣也就給內存增加了無意思的壓力,用戶體驗上也不大友好,尤其在有網絡請求等開銷時長比較長的情況下。

那有沒有上面解決辦法呢?答案是肯定的。onDestroyView的執行和Activity的onDestroy不一樣,不會銷毀當前的頁面,所以Fragment的所有成員變量的引用都還在。那就好辦了,我們在onCreateView的時候,先判斷該取到的數據是否為空,比如Fragment的根視圖rootView,網絡請求獲取到的數據等,如果不為空就不用再次執行。這樣一來也就避免了上述說的那些問題的存在了。

 

但是需要注意的一點就是,如果重用rootView的話,一定要記得在onDestroyView里面把rootView先給移除掉,因為已經有過父布局的View是不能再次添加到另一個新的父布局上面的。代碼如下

 

這樣也就解決了最前面我遇到的那個bug,由于每次進入都會創建一個MapView,很多地圖疊在了一起,所以就出現了"滑不動"的奇怪現象。

今天分享的只是一個優化策略罷了,希望能幫助到你。

本文鏈接:http://my.oschina.net/u/1171391/blog/295649

責任編輯:chenqingxiang 來源: oschina
相關推薦

2022-10-14 09:12:59

參數Python類型

2023-02-08 16:29:58

前后端開發

2021-07-08 23:53:44

Go語言拷貝

2019-09-11 10:09:00

Java虛擬機算法

2013-04-17 10:34:55

.NET大對象堆

2009-06-01 14:54:50

jpaapiJava

2017-10-20 10:19:49

Kotlin語言陷阱

2019-07-10 09:12:20

程序員級別跳槽

2010-10-22 15:45:49

無線互聯

2011-04-14 13:52:27

ArrayList

2023-06-26 00:03:55

Go語言類型

2021-06-07 12:40:34

Python代碼陷阱

2023-10-09 13:15:35

軟件測試

2012-01-05 10:19:43

JavaScript

2015-08-27 10:11:18

2009-06-16 13:48:42

Java多線程

2020-08-13 06:43:41

React前端開發

2024-06-20 13:38:03

2021-09-03 14:00:52

端點安全漏洞網絡安全

2021-03-01 15:52:14

開源開源軟件陷阱
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人精品一区二区三区中文字幕 | 久久久www成人免费无遮挡大片 | 夜夜爽99久久国产综合精品女不卡 | 黑色丝袜三级在线播放 | 日本特黄a级高清免费大片 特黄色一级毛片 | 欧美成人免费 | 成人精品鲁一区一区二区 | 91久久精品国产 | 国产成人精品视频 | 国产免费人成xvideos视频 | 亚洲a视| 免费在线观看毛片 | 日韩精品久久久久久 | 欧美日韩国产在线观看 | 亚洲精品视频一区二区三区 | 亚洲网站在线播放 | 农村妇女毛片精品久久久 | 91超碰caoporn97人人 | 九九看片| 国产精品久久 | 男人天堂99| 国产午夜一级 | 羞羞网站免费 | 欧美一级免费片 | 日韩一区不卡 | 国产成都精品91一区二区三 | 阿v视频在线观看 | 亚洲天堂一区二区 | 亚洲精彩视频在线观看 | 91久久精品一区二区二区 | 操人网 | 亚洲精品国产电影 | www国产亚洲精品久久网站 | 欧美成人a∨高清免费观看 91伊人 | 欧美激情亚洲激情 | 福利一区二区在线 | 欧美色性 | 影音先锋中文字幕在线观看 | 中文在线一区二区 | 伊人精品在线视频 | 四虎海外 |