Android アーキテクチャ コンポーネントを活用して簡潔で効率的なコードベースを作成した iHeartRadio
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
ニューヨーク市に拠点を置く iHeartRadio は、無制限の音楽と数千のラジオ局のすべてを 1 つのアプリで提供しています。同社では、ラジオ放送、オンライン、モバイル、デジタル、ソーシャル メディア、ライブ コンサートやイベント、シンジケーション、音楽研究サービス、インディペンデント メディア表現などの事業を運営しています。
同社のアプリは、2008 年の公開以来、世界中のリスナーに 10 億回以上ダウンロードされています。しかし 2017 年末の時点で、コードベースの老朽化が目立つようになっており、コードのメンテナンスや新機能の追加が難しい状況となっていました。
iHeartRadio の取り組み
iHeartRadio は、コードの刷新に着手するにあたり、Android アーキテクチャ コンポーネントの導入を決断しました。iHeartRadio がコードで幅広く使用している非同期クエリや RxJava のサポートといった処理が可能な Room 永続性ライブラリが、簡単で実装も容易でした。
また iHeartRadio では、別のコンポーネントのライフサイクル ステータスの変化に対応してアクションを実行するライフサイクル対応コンポーネントも導入しています。同社のエンジニアがこのコンポーネントを特に高く評価しているのは、アクティビティやフラグメントの依存関係を少なくできる点です。さらに、ViewModel を使用してプロトタイプを作成することで、画面の回転などの構成変更後にもデータを引き継ぐことができます。
結果
iHeartRadio は、アーキテクチャ コンポーネントへの移行が簡単になったことと、ライブラリを使用して統合が正しく機能しているかどうかをテストすることで確認しました。Room などのコンポーネントでは、必要なボイラープレート コードがほとんどありません。つまり、アプリのコードが大幅に短縮されています。アーキテクチャ コンポーネントでは、メモリリークも減少しました。さらなるメリットとして、新たにチームに加わったデベロッパーが直ちに状況を把握し、コーディングを開始できるようになりました。
全体として、アーキテクチャ コンポーネントの導入により、iHeartRadio はクリーンで無駄のないコードベースを作成し、エラーを防止できるようになりました。これはどのアプリにとっても良いことです。特に、世界中のユーザーにオールインワンのデジタル オーディオを提供するアプリにとっては好都合です。
始める
Android アーキテクチャ コンポーネントは、Android Jetpack の一部として、全デベロッパーに公開されています。Android アーキテクチャ コンポーネントを使ってみるをご覧ください。
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2018-05-03 UTC。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"必要な情報がない"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"複雑すぎる / 手順が多すぎる"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"最新ではない"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"翻訳に関する問題"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"サンプル / コードに問題がある"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"その他"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"わかりやすい"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"問題の解決に役立った"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"その他"
}]
{"lastModified": "\u6700\u7d42\u66f4\u65b0\u65e5 2018-05-03 UTC\u3002"}
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2018-05-03 UTC。"]]