2017-07-03 107 views
5

我有一個非常普遍的問題,我沒有爲我的問題找到具體答案,因此再次提出。多個活動或單個活動和多個片段

我想兩種方法

之間決定
  1. 各種不同的窗口和任務,以避免複雜性和問題
  2. 單活動,併爲不同的任務和用戶的多個片段可以瀏覽喜歡的活動持片段專用活動用戶將導航到Fragment B,Fragment C,這可以來回交易。

我想知道什麼?

  1. 是活動轉換對於處理器來說代價高昂還是實現簡單化內存開銷可以忽略不計?
  2. 片段在管理生命週期的過程中有開銷,所以這個生命週期管理器會帶來什麼問題?
  3. 處理碎片事務並保存碎片狀態有多容易?

我們現在還不知道要保存片段的數據量是多少。

+0

因爲我知道片段的一個用途是,您可以使用它來解耦代碼,從而防止活動成爲巨人。維護代碼並保持簡單非常重要。 –

回答

1

我的問題是一樣的,直到現在在我所有的應用程序中,只有一個Activity,其餘的都是Fragments。我同意維護Fragment很難,但使用Fragment會增加你的性能。

假設,舉個例子,

我有10個活動,每個活動,我打電話異步任務執行一些後臺操作。在每個異步任務的onPostExecute()中,您正在更新您的UI。但在完成doInBackground()之前,您切換了Activity並且該Activity已被銷燬,但請記住doInBackground()仍在進行中,一旦完成,將調用onPostExecute,並在onPostExecute()中更新UI,但活動被破壞,所以這會在您的應用程序中造成泄漏。 但是如果你只維護一個活動,那麼它很容易維護。

也在等待別人的意見。

+0

爲防止泄漏,您可以使用異步任務加載器。並且只有你使用片段的泄漏原因,那麼你也應該嘗試加載器。他們比異步任務更有效率 –

+0

我剛剛舉了一個例子,我也在混淆中使用。如果我們使用Fragments,GPU Overdraw會更多,但是在Activity中,GPU透支會更少,因爲我認爲...所以看到有很多優點和缺點。 – Shekhar

4

那麼,它完全取決於應用程序的設計,流程和它的導航。

下面是使用單活動和多個片段的一些優點:

  1. 性能片段事務比創造新的活動快。
  2. 導航抽屜和工具欄,使用單個活動很容易管理。
  3. 相同的上下文可以在任何地方使用。
  4. 片段的setRetainInstance在管理方向變化時非常有幫助。

有了它,來了幾個缺點:

  1. 活動變得非常凌亂了大量的代碼。
  2. 處理按鈕後退是非常繁瑣的,因爲只有Activity可以處理不是Fragments。

我個人使用與其中我分離基於所述模塊活動多個片段的多個活動。在同一模塊中,子模塊可以分段創建。我發現很容易在不同的情況下管理,就好像應用程序關閉,重新打開通知,方向更改一樣。

+0

我們還可以處理片段中的onBackPress()。 創建一個單獨的類FragmentBackHelper,這將擴展Fragment,並將實現IOnBackPressed。 現在在IOnBackPressed中創建單獨的接口名稱,並使用此代碼。公共接口IOnBackPressed { boolean onBackPressed(); } 。 現在無論你想處理onBackPress(),只要擴展這個類。 「FragmentBackHelper」。 – Shekhar

+0

Buddy,其中是Fragment類中的onBackPressed()方法,您可以通過實現接口在Fragments中創建自定義方法,但最終會由Activity的onBackPressed觸發,對吧? – Ani

+0

是的,用這個,我們可以處理onBackPress(),對嗎?我知道它會調用Activity的onBackPress,但我們仍然可以在onBackPress()中做的事情,對嗎?幫助我瞭解我是否錯了。 – Shekhar

1

除了上面的答案,我會添加幾點,這可以幫助決定何時使用片段以及何時使用活動。

  • 如果你支持更大的屏幕尺寸,片段肯定比活動更受歡迎。
  • 當你一些代碼,您認爲可以在多個屏幕可重複使用的,您可以使用它可以在不同的地方
0

一個小點被重用的片段,以支持「單活動的多個片段添加」。

有時,您可能需要一個組件(例如橫幅廣告)才能在應用程序的不同頁面/屏幕之間持續存在。如果您有多個Activities,則需要在每個Activities上重新創建該組件。但是如果你有一個單一的Activity,你只需將該組件添加到活動佈局中即可忘記它。