Jetpack Navigation (Google I/O'19)メモ
Google I/O 2019のJetpack Navigationのセッションをまとめました。カッコ内の時間は、下記youtubeのおおよその時間です。
https://www.youtube.com/watch?v=JFGq0asqSuA
Navigation 2.1
2019/6/2時点での最新は、5/16リリースの2.1.0-alpha04
New Features
Dialog Destinations(10:10~)
Navigation Graph内で、<dialog> destinationを使うことでDialogFragmentを表示することができるるようになった。
ViewModels in Navigation(10:55~)
Navigation Graphのスコープに基づいたViewModelがサポートされた。Fragment間でのデータ共有にViewModelが使用できる。
Safe Args(12:55~)
Safe Argsのメリットは、コンパイル時間の短縮、Auto-Completeにより型安全な宣言をサポートできる。
SafeArgs + Kotlin(17:00~)
GenerateコードをKotlinにできるようになった。
旧:apply plugin: "androidx.navigation.safeargs"
新:apply plugin: "androidx.navigation.safeargs.kotlin"
なぜKotlin対応をしたのか?
・パフォーマンスのメリットがある
・Idiomatic Kotlin Codeを使える(Named Arguments/Default arguments/Data Classes etc.)
More type support(18:10~)
Parcelable/Serializable/Enumを新たにサポート
Mudularizing(18:50~)
AppBundleやDynamicFeaturesによりアプリのマルチモジュール化が進んでいる。Navigationもその流れをサポートしている。
(Navigation Graphは巨大になりがち&アプリの規模によってはpreviewなどで動作が重くなる)
Including and nesting Navigation Graph(21:25~)
Navigation Graphに対して<include>が使える
Navigating by URI(23:00~)
Deep Linkの仕組みを使うことで、他のNavigation GraphのDestinationへ飛ぶことができる。
Navigating Dynamically(23:55~)
Dynamic Featuresに対応予定とのことです。
今年の後半にリリース予定で、以下のような流れになります。
・Dynamic FeatureのDestinationへのNavigationをinterceptする
・Dynamic Featureをinstall(Install中はprogress表示)
・Install後、Navigationの処理を継続
所感
前のプロジェクトでNavigationを使っていて、便利だった一方、Navigationのxmlが巨大になりすぎて大変だったり、safe argがenumに当時は対応していなかったりと苦労も多かったです。
ですので、今回のアップデートは私個人としてはとても興味深いものでした。実際にまだ触っていないので、触ったら具体的なコードと共に、記事を書いてみたいと思います。