21
36

More than 3 years have passed since last update.

Android初学者用まとめ

Last updated at Posted at 2020-04-29

はじめてAndroid開発を行って学んだことをまとめました。
最初は、はじめてのAndroidプログラミング 第4版 | 金田 浩明 |本 | 通販 | Amazonを読むのがすごくお勧めです。
数時間ですらすら読めてAndroid開発の特徴をつかめました。

アーキテクチャ

Androidのアーキテクチャを考える時

これが丁寧で分かりやすい。
Androidアーキテクチャことはじめ ― 選定する意味と、MVP、Clean Architecture、MVVM、Fluxの特徴を理解する - エンジニアHub|若手Webエンジニアのキャリアを考える!

公式のアーキテクチャガイド
アプリのアーキテクチャ ガイド  |  Android デベロッパー  |  Android Developers

公式のサンプルコード
GitHub - android/architecture-samples: A collection of samples to discuss and showcase different architectural tools and patterns for Android apps.

MVVM

MVVMを調べるときに参考にしたサイト
Android Architecture Components 初級 ( MVVM + LiveData + Coroutines 編 ) - Qiita

AndroidのMVP・MVVMの人気サンプルプロジェクト2個の実装方法を読む - Qiita

Android Data Binding + MVVMパターンのサンプルを書いてみた - Qiita

コーディング規約

Various Android Coding Style2016 - Qiita

Androidコードディング規約 - Qiita

リソースに関するコーディング規約について
Android アプリのリソース定義ポリシーを整備した話 - クックパッド開発者ブログ

プロジェクト

プロジェクトの概要  |  Android デベロッパー  |  Android Developers

プロジェクト構成

Androidのパッケージ構成について考えてみた - Qiita

リソースフォルダ

mipmapとdrawableの違い
Androidのmipmapとdrawableについて - Qiita

モジュールの呼び出し

AARファイルを使ってモジュールの呼び出しを行う。
AARファイルはAndroid Studio専用のライブラリ。
Android Studio で AARファイルを作って読み込む - Qiita

ドキュメントコメント(Kotlin)

Kotlinの場合、KDocというAPIドキュメントを使って実現する。
Documenting Kotlin Code - Kotlin Programming Language

KDoc 書き方メモ(Kotlin のドキュメンテーションコメント) - Qiita

出力は、Dokkaというツールを使う。
GitHub - Kotlin/dokka: Documentation Engine for Kotlin

ライフサイクル

ライフサイクルを制すものはAndroid開発を制すと言われるくらい大切な概念。
スマートフォンは割込み処理が多くメモリが少ないためメモリの開放が行われるため、その対応のためにライフサイクルを考慮した設計が必要になる。
アクティビティのライフサイクルについて  |  Android デベロッパー  |  Android Developers

アクティビティのライフサイクル - Androidプログラミング入門 | JavaDrive

以下が主なライフサイクルの流れになる。
アクティビティが表示されて実行中になる
onCreate => onStart => onResume

別のアクティビティが表示される
onPause => onStop
再びアクティビティが表示されるときはonResumeに戻る。
例えば、ホームボタンを押したとき

非表示になって再表示される
onStop => onRestart => onStart

アクティビティが終了する
onPause => onStop => onDestroy
例えば、戻るボタンでアプリを消したとき
画面を回転させたときもonDestroyは実行され、onCreateが実行される。Fragmentも破棄される。
この時、引数Bundleが入っている。

上記以外にも様々なメソッドが実行されている。
Activity  |  Android デベロッパー  |  Android Developers を確認しよう。

Fragment

画面の一部を使いまわすときに使う。
Fragmentのライフサイクルは、Activityとは異なる。
Fragmentが非表示なった時は、バックスタック(スタック構成でFragmentを一時的に保存しておく機能)に入りonPauseが実行される。
バックスタックにはいったFragmentは再生成せず取り出し可能になる。
フラグメント  |  Android デベロッパー  |  Android Developers

続: Fragment使う人に最低限、知っておいて欲しいこと - めがねをかけるんだ

ActivityやFlagment間でのデータをやり取り

ActivityやFlagmentは、メモリが少なくなったり画面を回転させると再生成する場合がある。その時、メンバー変数などの値が消えるためArgumentにデータを保管する必要がある。
保持されるデータはBundle型になる。
Argumentの処理はコンストラクタではなく、スタティックメソッドの中で行う。
破棄されたFramgmentが再び生成されるときは空のコンストラクタが実行されるためコンストラクタで初期化するとアプリが落ちてしまう。
Y.A.M の 雑記帳: Android Fragment で setArguments() してるサンプルが多いのはなぜ?

最近は、SafeArgsを使ってActivityやFlagment間でデータをやり取りするみたいです。
Navigation SafeArgsを使って画面遷移でパラメータを渡す - ticktakclockの日記

デスティネーション間でデータを渡す  |  Android デベロッパー  |  Android Developers

マルチスレッド

画面に関する処理は全てメインメソッドで行う必要がある。
Handlerで別スレッドで行いたい処理を委譲することで画面の処理はメインメソッドに渡すようにしてやる。
Handlerクラスの正しい使い方(Androidでスレッド間通信) - ちくたく

データの保存

データの保存の種類について
データとファイルのストレージの概要  |  Android デベロッパー  |  Android Developers

【Android】データの保存と共有について - Qiita

内部ストレージへの保存

内部ストレージに保存した場合、保存元のアプリだけアクセスできる。
アンインストールすると、内部ストレージのデータは消える。
APIでファイル読み書きが可能。
内部ストレージにファイルを保存する  |  Android デベロッパー  |  Android Developers

SharedPreferences

データの規模が小さくて構造的なデータではないデータを保存するのに適する。
簡単なKey-Valueしか対応できない。
SharedPreferences  |  Android デベロッパー  |  Android Developers

DB

AndroidではSQLiteが標準のDBで用意されている。
SQLite を使用してデータを保存する  |  Android デベロッパー  |  Android Developers

DBの設定などアプリケーション実行時に処理することは、Applicationクラスを継承したクラスを作って、Manifest.xmlに追記する。

Applicationクラスを継承して、データの共有をする。 | TechBooster

音を再生する

SoundPool

短めの音を流す時に使う。
streamTypeを分けることで複数の音声を同時に鳴らすことが出来る。
音データの読み込みはメモリを多く消費するためonResumeでロードし、onPauseeでメモリ開放する。
APIバージョン21以降ではSoundPool.Bolderクラスを使うことが推奨されるため分岐でバージョンごとに処理を変える。
SoundPool  |  Android デベロッパー  |  Android Developers

MediaPlayer

長めの音を流す時に使う。
MediaPlayer の概要  |  Android デベロッパー  |  Android Developers

オーディオフォーマット

OGGがおすすめ。
どのバージョンのOSでも対応している。
Androidで音声扱うときはoggにしとくのが良いっぽい - Hacking My Way 〜 itogのhack日記

UI

アプリリソースについて

ラベル名やメッセージなどの文字列

res/values/strings.xmlに登録する。

res/values/colors.xmlに登録して参照する。

寸法値

res/values/dimens.xmlに登録して参照する。
Androidは解像度が異なると文字・マージンの大きさが同じでも見え方が異なるためdimens.xmlを解像度ごとにフォルダを分けて管理する。
Android開発者のみなさん、レイアウトを作るとき、文字やマージンの大きさって端末間の差をどうやって対応していますか?

文字の大きさの単位

sp
ユーザーのAndroid設定が反映された文字列の大きさになる。
dp
ユーザーのAndroid設定によらず固定になる。
【Android】いまさら聞けないdp入門 - Qiita

スタイル

res/values/styles/styles.xmlに登録して参照する。
アプリリソースの概要  |  Android デベロッパー  |  Android Developers

画像

res/values/styles/drawables.xmlに登録して参照する。

アイコン

解像度に合わせて6種類用意する。
Android4.2以降は、アダプティブアイコン(拡大縮小などに対応)に対応するためres/mipmapに置くだけで良い。
各種のピクセル密度をサポートする  |  Android デベロッパー  |  Android Developers

ベクター形式の画像を使えば軽く拡大縮小で劣化しないのでおすすめ。
ベクター形式の画像はAndoroid 5.0からの対応するため、それ以下のバージョンに対応するにはサポートライブラリを使用する。
build.gradleファイルにサポートライブラリを使用する設定を行う必要がある。
さまざまな密度に適用可能なベクター グラフィックの追加  |  Android デベロッパー  |  Android Developers

ベクター形式の画像

ボタンに使うAndroidで統一性を持たせる&軽いためAndroid Studioで提供されているベクター形式の画像が良い。
使い方
[Android] VectorDrawableでベクター形式のアイコンを描画する - JoyPlotドキュメント

アプリ内ボタンにマテリアルデザインアイコンを使う [Android] - Qiita

ベクター形式の画像の一覧
Icons - Material Design

Button

AppCompat.Buttonを使う。
Androidのボタンスタイルを理解する - Qiita

MaterialButtonを使う。
Goodbye shape - AndroidのMaterialButtonがすごい良かった話 - Qiita
android - Material design button with border - Stack Overflow
Buttons - Material Components for Android

MaterialButtonを使うときは、以下のようにandroid:textApperance属性を追加しないとエラーが起こります。

    <com.google.android.material.button.MaterialButton
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="@style/TextStyle"
        app:strokeColor="@color/colorPrimary"
        style="@style/Widget.MaterialComponents.Button.OutlinedButton" />
styles.xml
    <style name="TextStyle" parent="@android:style/TextAppearance">
        <item name="android:textSize">20sp</item>
        <item name="android:textColor">#797979</item>
    </style>

AppTheme

アプリケーション全体のスタイルを統一する仕組みとしてテーマというものがあり、新規プロジェクトではAppThemeという名前のテーマが指定されている。
アクションバーの見た目を変えたりするときはこのあたりを検索するとよい。
スタイルとテーマ  |  Android デベロッパー  |  Android Developers

Layout

Androidのレイアウト👶初心者向けざっくり理解 - Qiita

Constraint Layout

要素に制約を持たせて表示することが出来るレイアウト。
Autoconnect
自動で制約を追加してくれる。
Barrier
複数のViewの端を表すガイドラインを作ることができる。これを使って長さの違う複数のViewの端から別のViewをくっつけたりすることが出来る。
Group
複数のViewをまとめることができる。一気の非表示にしたい時などに使う。
Chain
Viewの間隔を均等に配置したい時に使う。
ConstraintLayoutをもう少し深く知ってみる - Qiita

FrameLayout

Viewを重ねて表示することが出来るレイアウト。

レイアウトのインクルード機能

レイアウト定義されたXMLファイルに別のレイアウト定義したXMLファイルを読み込む。
Androidで個人的によく使うlayout系設定チートシート - Qiita

ImageView

scaleTypeの設定で表示方法が変わる。
【ImageView】ScaleTypeと表示画像の対応表 - Qiita

一覧表示を行う

ListView

簡単に扱えるが大量のデータ表示には向かない。現在はレガシー扱い。

RecyclerView

大量のデータ表示やスクロール表示ができる。
項目の配置はレイアウトマネジャーによって決定する。データはアダプターを介して取得する。
データ項目には固有のIDを持っている。IDを使ってデータ更新を変更のあった項目だけ更新することが可能になり、画面のちらつきを軽減する。
項目がタップされたことは、アダプターからアクティビティへ通知するコールバックにて対応する。

スワイプしてViewを入れ替える

スワイプ操作でViewを切り替えるには、ViewPageとPageAdapterを使う。

ViewPage

必要なViewをPageAdapterに要求し、受け取ったViewを表示する。

PageAdapter

Viewの生成を行い、ViewPageに渡す。

ボタンの同時押し禁止

Constraint LayoutのsplitMotionEventsをfalseにすればボタンタップによって発生するイベントは1つになる。
Androidでボタンの同時押し防止 | backport

機能実現方法

他のアプリを呼び出して使う

暗黙的なインテント

こちらでは呼び出したい機能を指定するだけで、あとはAndroidシステムに起動するアプリを任せてしまう。
例えば電話やブラウザ起動、メール送信などAndroidシステムに任せられる。
インテントとインテント フィルタ  |  Android デベロッパー  |  Android Developers

Android Intentで画面遷移する(暗黙的Intent) | TechBooster

アラームなどある時間に処理を行う

Androidで非同期に発生するイベントはブロードキャストでインテントが送られる。
ブロードキャストするインテントとブロードキャストを行う時間を設定するAlarmManagerとブロードキャストを受け取るBroadcastReceiverで実現する。
指定したタイミングで発行するブロードキャストイベントはPrndingIntentクラスで作成する。
[Android] AlarmManagerをBroadcastRecieverと使う

通知方法

Toastやダイアログなど通知方法が様々存在するので、用途に応じて使い分けよう。
Android いろいろな通知の表示方法(Toast, Snackbar, Dialog) - Symfoware

[Kotlin] Androidにおける通知の送信と通知をタップしたときの処理 - JoyPlotドキュメント

ダイアログ

DialogFragment
ダイアログを管理するフラグメントを使う。画面回転や戻るボタンの制御をしてくれる。
DialogFragmentとアクティビティのやりとりはコールバックを使う。
リスナーを介してDialogFragmentからアクティビティのメソッドを呼ぶ。
ダイアログ  |  Android デベロッパー  |  Android Developers

Android Studio

コピーライト

Android Studioならコピーライトを簡単に自動挿入できる。
Android Studio で新規ファイル作成時に Copyright を自動挿入する | まくまくAndroidノート

その他

AndroidXは、新しいサポートライブラリ。API28以上から使用可能。
AndroidX の概要  |  Android デベロッパー  |  Android Developers

UIで躓いた点などがまとまってて面白かった。
Androidアプリを作ってから参考書を読んだら驚いた|toconakis.tech

21
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
36