我是一個Android的開發者,最近有點小苦惱,下面是最近一個項目的主界面的四個界面,最後一個界面是「我」,我就沒有貼出來。

一般像這種界面的話,我們一般是一個Activity,下面是五個RadioButton,然後上面是一個ViewPager裡面配上五個Fragment,分別在五個Fragment中去填充頁面和數據。 但是大家仔細看下,第一個界面---諮詢---,裡面要展示大量的數據,而且,這個Fragment中還要再填充一個ViewPager,ViewPager裡面再加上7個Fragment,每個Fragment都包含大量的控制項和數據。 第二個頁面---數據---也是一個ViewPager加上三個Fragment,第一個Fragment---百科---裡面又是一個ViewPager加上10個Fragment,並且每個子Fragment裡面有很多的控制項和數據,第二個Fragment---問答---裡面也是ViewPager加上4個Fragment,第三個Fragment---智庫---裡面也是ViewPager加上8個Fragment,每一個Fragment都很「重」。 第三個頁面---產品---也是一個ViewPager加上10個Fragment,而且每個Fragment都有刪選功能,數據雜而多,每個頁面壓力很大。

第四個頁面---服務---到時候會引進某個第三方地圖,還要進行很多定製,這個頁面壓力也很大。。。

我在想,一個MainActivity,在一進來的時候,就要載入多達42個Fragment,當然ViewPager自己會進行自定義緩存少幾個,但即使這樣,也還是很多很多啊,還不算其他二級頁面。我的天,想著就感到很沉重。。。 小弟我確實很苦惱,所以想問問知乎大神,一般如果是你遇到這樣的需求,你們會怎麼處理呢?另外,如果按照我說的那種方式處理,MainActivity會不會卡成狗,崩掉呢?還有一般在這個方面的優化思路有哪些呢?在此謝謝大家了


描述的很複雜

我簡略看了一下,其實什麼技術都不需要用的,viewpager默認最多載入三個碎片,其他的沒有被初始化的。

然後你碎片裏又有碎片,也最多九個而已。

而且相同的佈局,可以考慮只用一個碎片,使用不同的適配器的方式

看不到的碎片界面都是會被及時銷毀的,僅保留數據提問題前你先了解,測試一下是否真的會有這個問題再提

看你簽名安卓開發工程師,不敢班門弄斧.....

提點想法吧要麼做成webapp吧,一個webview載入適配頁面,省你的事要麼自己逛github看看有什麼好的適合的開源框架,直接原生v+f肯定卡另外,看設計圖,首頁從百科開始後面的UI和資訊有很大偏差(搜索欄跑到標題之下,標題在頂部著色),不知道是不是你們設計的鍋


1、據需求進行結構的合理搭建 由於你們的項目中採用了ViewPager+Fragment的結構,所以切換頁簽時頁面會刷新,但是你可以考慮一下你們的項目是否需要每次切換到該頁簽時就需要進行頁面的刷新,如果不是,那麼你們項目的Activity的結構就應該進行調整,完全可以用多Fragment實現,而且不會每次切換每次進行數據請求刷新頁面。2、對於Fragment重疊的解決---------------------------------------摘自Fragment全解析系列(一):那些年踩過的坑----------------------------- 如果你add()了幾個Fragment,使用show()、hide()方法控制,比如微信、QQ的底部tab等情景,如果你什麼都不做的話,在「內存重啟」後回到前臺,app的這幾個Fragment界面會重疊。

原因是FragmentManager幫我們管理Fragment,當發生「內存重啟」,他會從棧底向棧頂的順序一次性恢復Fragment;

但是因為沒有保存Fragment的mHidden屬性,默認為false,即show狀態,所以所有Fragment都是以show的形式恢復,我們看到了界面重疊。(如果是replace,恢復形式和Activity一致,只有當你pop之後上一個Fragment才開始重新恢復,所有使用replace不會造成重疊現象)。

還有一種場景,add和replace都有可能造成重疊: 在onCreate中載入Fragment,並且沒有判斷saveInstanceState==null,導致重複載入了同一個Fragment導致重疊。(PS:replace情況下,如果沒有加入回退棧,則不判斷也不會造成重疊,但建議還是統一判斷下)。

---------------------------------------摘自Fragment全解析系列(一):那些年踩過的坑-----------------------------

詳細的Fragment結構的處理,你可以看該鏈接:Fragment全解析系列(一):那些年踩過的坑。

這些是開發中我對Fragment的理解與之前學過的一些對Fragment的處理與Activity結構搭建的建議,希望能幫到你,如果有錯誤的地方請指正。


Fragment懶載入,FragmentTabHost代替ViewPager

這種問題,不要在知乎問,感覺在那些技術網站(問答)問更好。

ViewPager自己會進行自定義緩存少幾個

可以手動設置。

1,產品的需求,永遠是無窮無盡的。技術的實現,永遠是有窮盡的。不是產品提了,我們就應該做。越多的東西,總是意味著越卡。像我這麼不要臉的程序員,經常會提醒產品,這樣設計會有什麼問題。又或者更直接的嘲諷臉:「我要是能做到我早跳槽拿高薪了,陪你在這裡玩?」(開玩笑)

2,釋放。無論多少頁面。實際呈現的一級頁面永遠不會多。底部的五個頁面之外,其他的什麼諮詢,百科,問答,智庫類tab頁面完全切掉後可以釋放掉。當然,體驗肯定沒有不切換好。實在不行,可以考慮做緩存。

3,考慮到大多是列表。列表本身就帶有釋放功能。

4,其實底部的五個一級頁面,也是可以用HomeFragment ViewPager去做嘛
難道沒人抽個時間幫幫忙麼


推薦閱讀:
相關文章