2014-01-30 28 views
2

對於幾天來說,我有一個問題在我的腦海裏找不到任何答案。現在我有一個Android應用程序,我使用1片段和一個視圖分頁器3片段。我想知道的是,這兩者之間有什麼表現差異?片段的使用是否比使用活動的成本低?在改變佈局的情況下,對設備的RAM/CPU有什麼好處;從一個活動跳到另一個活動還是在viewpager的片段之間跳過?因爲如果我使用活動,每次都會彈出一個窗口。但在viewpager的片段中,我將停留在一個活動中,並且只會更改頁面。這會爲我提供設備性能還是僅僅是UI問題?怎麼選擇:活動或viewpager(帶有片段)

在此先感謝。

回答

3

ViewPager以這種方式工作:假設它有n頁面或片段。如果您在索引i,則Android將確保碎片i-1i + 1並且它們的視圖被實例化。當你從一邊到另一邊翻頁,根據內存和「不要保留活動」設置,你將繼續實例化片段,直到所有片段出現在內存中。當你從一邊到另一邊時,Android使用OpenGL平滑地滑動一個片段的視圖到屏幕上,同時滑動另一個片段。

與其他一些答案相反,Android不會而不是當ViewPager啓動時實例化所有碎片 - 實例化是懶惰的。除了上述默認行爲外,您還可以使用setOffscreenPageLimit()控制內存使用。

這與舊版活動堆棧模型的關鍵區別僅在於調用時實例化活動。

有幾種後果:

  • 當ViewPager首先顯示,則CPU將更加活躍因爲它已經以實例化片段被示出和那些離屏的左側和右側( 2x或3x等效工作)
  • 由於所有片段都保留在內存中,所以內存使用將會(略高)。如果你的碎片沒有使用太多的內存,那麼內存使用的差異是微不足道的。
  • 如果有內存壓力(或「不保持活動」開啓),則只保留2或3個片段;其他碎片被暫停,因此您需要確保onSaveInstanceState()已正確實施。當用戶滑回時,碎片將被恢復。但是,恢復片段比創建等效的新活動需要更少的CPU資源。一旦片段被實例化,當用戶從一邊滑到另一邊,CPU使用率將會降低,並且(最重要的)UX將會更平滑由於視圖已經存在並呈現在內存中,因此可以使用
  • 使用父活動作爲通信中心,片段之間的通信相對比較容易。

另一點:ViewPager的用戶界面隱喻與活動堆棧不同。在權衡採取何種方法時,除非實施成本極高,否則您可能應該將UX評估爲實施細節(CPU和內存)。

2

有區別的B/W的2:

  • 如果你使用的片段,然後在第一時間你的活動負載,它會在這裏,如果你加載所有的片段作爲一次(一個巨大的內存消耗有很多碎片,但在你的情況下,3片段可能是可以接受的)。但是因爲它一次加載ALL,所以你可以在不延遲的情況下前後移動(無論如何,這對於視圖傳呼機來說是顯而易見的)。因此,如果需求允許用戶移回和轉發頁面,那麼Fragment是您的選擇,問題在於您如何管理內存消耗以避免內存泄漏或內存不足異常。

  • 如果您使用活動(許多活動)而不是碎片,那麼每當您每次回來時,內存都會堆積起來,每次向前移動和卸載。看起來效率更高,但是如果每個活動都包含需要稍微加載的大圖像,則會出現許多問題。因此,每次你前進或後退都會有延遲,這對用戶來說是不好的。所以,如果要求只允許用戶前進,那麼使用活動而不是片段顯然是正確的。

總之,根據您的應用程序要求以及如何管理使用片段或活動的內存問題。這些只是我的經驗和觀察,我不能保證在任何情況下都是如此。有一個更好的解釋,我還不知道。希望這個幫助和英語不是我的母語,如果你不明白下面的評論。