![見出し画像](https://assets.st-note.com/production/uploads/images/64300849/rectangle_large_type_2_0294a0272d3481e086a205776401ec91.png?width=1200)
Compose の可能性が広がる DroidKaigi 2021 〜 勉強になったセッション 3 選 〜
こんにちは、Zaim で Android 開発を担当している @sakai です。
2021 年 10 月 19 日(火)〜 21 日(木)にオンライン開催された Android の技術祭典の「DroidKaigi 2021」に参加しました。本記事では、今回の DroidKaigi で、私が特に勉強になったセッションを三つご紹介します。
1. Introduction to dual-screen and foldables development
最近 CM でも見かけるようになった Android の折りたたみ式デバイス対応の話です。
折りたたみ式デバイスは二種類あり、折りたたみ可能な一つのスクリーンでできた『シングルスクリーン折りたたみ式デバイス』と、ヒンジで結合された二つのスクリーンからなる『デュアルスクリーン折りたたみ式デバイス』があります。
これらの折りたたみ式デバイス対応のキーとなるのが Jetpack Window Manager というクラスです。このクラスからは
・現在アプリを表示しているディスプレイ領域
・使用可能な最大ディスプレイ領域
・折りたたんである状態であるか否か
などといった折りたたみ式デバイスの動的なディスプレイ情報を簡単に取得できるようです。
また、折りたたみ式デバイスで半分のディスプレイはレイアウト A を、もう半分のディスプレイにはレイアウト B を表示したいといった場合には、SlidingPaneLayout を使うと自動的に折りたたみ部分で別れるように二つのレイアウトを表示してくれるので便利であることが分かりました。
折りたたみデバイスの対応として、Jetpack Window Manager と SlidingPaneLayout の二つのクラスでほぼ実装できてしまいそうなのは便利で良いなと思いました。
2. State of the art of Android widgets
Android 12 で Android Widgets に関する技術の大幅なアップデートがあったという内容でした。例えば、
・ウィジェットを角丸にできるようになった
・アプリのテーマから配色できるようになった
・セルサイズ単位でウィジェットのデフォルトサイズを決められるようになった
など、レイアウトの観点で大きく改善があるようでした。
特にセルサイズ単位でウィジェットのデフォルトサイズが指定できるようになったことで、正確にデフォルトサイズの縦横比をいくつ対いくつと指定できるようになりました。これまでの OS では、デフォルトの縦横比は端末に依存してしまっていたので、Zaim でウィジェットを開発するときにも苦労していました。
Android 12 によるアップデートは、とにかく指定できる属性が増えてウィジェットの実装がより自由になったという印象です。
その他、ウィジェットを実装するときのベストプラクティスとして、ウィジェットの更新方法の種類や更新頻度などについても言及があり、実装の選択の幅が広がる発表でとても有意義でした。
また、Compose を使ってウィジェットのレイアウトが作れるライブラリも今後リリースされる予定だという発表もありました。現状ではウィジェットの XML によるレイアウト作成は使える View クラスや指定できる属性が限られているので、これから Compose で作れるようになると、より自由かつ簡単にウィジェットのレイアウトが組み立てられそうで、ライブラリーの正式なリリースが楽しみです!
3. Master of Lifecycle
ライフサイクルを理解してコーディングしたほうが良いという、基本ながらも奥が深いトピックでした。ライフサイクルを理解していなくても動くアプリを作れますが、端末リソースを無駄にしない、無駄なネットワーク通信をしない、クラッシュさせない、などといった理由からライフサイクルを意識したコーディングをしましょうという内容でした。
例えば API を呼ぶ時に、OnCreate で一度だけ呼べば済むところを OnResume で呼んでしまうと、無駄な API コールが発生してしまいます。ライフサイクルを意識していれば防げますが、ついやってしまいそうなミスなので、私もライフサイクルをちゃんと理解しようと改めて思いました。
また、ライフサイクルに従った UI の更新というサブトピックの中で、LiveData と Flow の挙動の違いについて詳しい説明がありました。LiveData は Android のライフサイクルが前提になっている一方、Flow は汎用的なため、Android のライフサイクルに従った処理を書きたい場合はひと手間加える必要があるそうです。
Flow に LiveData と同じような挙動をさせるには、Flow の launchWhenStarted、stateIn、flowWithLifeCycle などのメソッドを使うとよいとのことでした。
私は普段 LiveData を使って実装をしているので、プロダクションコードで Flow を使ってみる前に、この情報を知ることができて良かったです。
私と同じように普段は LiveData を使っている人でこれから Flow を使ってみたい人は、最初にこのプレゼンテーションを見ると LiveData から Flow へのマイグレーションを始めやすそうです。また、そもそも LiveData をやめて Flow にする必要があるのかを判断するのに、良いヒントを与えてくれると思います。
最後に
今年の三月から Zaim で Android アプリを開発するようになり、今回が初めての DroidKaigi の参加でした。新しい技術が出て便利になる一方、エンジニアのキャッチアップは大変だと感じました。個人的にまだまだ勉強すべきことが沢山あると知れ、勉強のモチベーションになったので DroidKaigi に参加して良かったです!
Zaim ではエンジニアの最新技術キャッチアップの支援として、カンファレンスなど業務に関わる勉強会については、参加費用の補助があり、業務時間で参加可能です。
Zaim ではエンジニアを募集しています。こうした社内制度や、どのようにチームで開発しているかなど、ざっくばらんにお話させてください!