Jake Wharton 建議一個應用只使用一個 Activity

簡評:TL;DR: 一個應用一個 Activity 加多個 Fragment,但別用 Fragment 的 backstack。

這是 reddit/r/androiddev 上的一個帖子,問的是最近在 droidcon NYC 2017 - Android Architecture Round Table(視頻在 Youtube 上) 的最後,一眾嘉賓被問到自己更偏愛應用「一個界面一個 Activity、多個 Activity 多個 Fragment、還是一個 Activity 多個 Fragment」。而 Jake Wharton 建議一個應用一個 Activity 多個 Fragment,但別用 Fragment 的 backstack(如果你不知道 Jake Wharton 是誰,那就看看他的 Github 主頁吧)。

不過 Jack Wharton 也沒有說自己的具體理由,但帖子下面的一個熱門回答得到了他本人的肯定(Nailed it.),這裡大概介紹下。

Q: Why does Jake Wharton recommend, "one activity for the whole app, you can use fragments, just dont use the backstack with fragments"?

因為 Activity 是一系列流程的起點,因此你應該將其視為一個應用的 "main" 函數。

而站在用戶的角度來看,通常可以這樣進入應用:

  • the launcher(也就是點擊應用圖標);
  • 通知;
  • 如果是一個相機應用,然後有請求圖片的 intent;
  • 如果是一個社交應用,然後有要分享的 intent。

但是,如果你的應用不需要處理來自其他應用的 intent,並且你應用的主要入口只是 launcher(或者說桌面),那麼就不要為每一個界面創建一個入口,因為這樣沒有意義。

Fragment 本身還是不錯的,但它的 backstack(回退棧) 是真的垃圾(原話)。如果你用過其自身的回退棧管理過 fragment,那坑肯定沒少遇到。

比如,一旦你將 fragment 放入 backstack,我個人是不確定它會執行其生命周期的哪個方法的。我遇到過一個退到後台的 fragment 觸發了四次 onCreateView()。

因此,如果你想更清楚知道當前有哪些 Fragment,正在顯示的是哪一個並好好控制應用的導航狀態,那麼建議最好自己處理 Fragment 的導航。這也是為什麼 square 發布了 flow。

更多的討論,感興趣的同學可以點擊下面的原文鏈接去看看。

原文:Why does Jake Wharton recommend, "one activity for the whole app, you can use fragments, just dont use the backstack with fragments"? ? r/androiddev

日報擴展閱讀:

  • Kotlin 1.2 正式發布

推薦閱讀:

自學編程這幾點非常重要
如何使用github上的android開源項目?
酷站推薦 - mumu.163.com - 網易mumu模擬器
使用 Scala 編寫 Android 應用

TAG:Android开发 | Android | 编程 |