あなたはすでにJavaの文法やオブジェクト指向、クラス設計、例外処理、スレッドといった基本概念を理解しているはずです。
Androidアプリの開発でもJava(またはKotlin)が使われるため、クラスの書き方やメソッドの記述に関しては、大きな違いはありません。
しかし、Androidアプリの開発には、これまでと違った設計思想や制約、習慣的な書き方が多くあります。
以下に、その代表的な点を「Javaの常識」と対比しながら紹介します。
1. mainメソッドは存在しない
■ Javaの常識:
main(String[] args) { // ここがエントリーポイント }
■ Android:
main()
は存在しません。- アプリのスタート地点は
Activity
のonCreate()
メソッドなどです。 - OSがインスタンスを作成し、ライフサイクルに応じてメソッドを呼び出します。
👉 OSが流れを握っており、アプリ側はそれに「応答する」スタイルです(イベント駆動型)。
2. UIはXMLで設計し、Javaコードで制御する
■ Javaの常識:
- UIはSwing/AWTでコード上に記述:
new JButton("OK")
など。
■ Android:
- 画面レイアウトはXMLファイルで記述し、
setContentView()
で読み込む。 - UI要素は
findViewById()
などでJavaコードと結びつける。
👉 UI設計がコードと分離されているのはメリットでもあり、混乱ポイントでもあります。
3. OSが「画面の状態」を管理している
- Androidでは、画面(Activity)は
onCreate()
→onResume()
→onPause()
→onDestroy()
のように、状態が自動的に推移します。 - 例えば、電話がかかってきたり画面回転したりすると、画面が一時的に消えたり再生成されたりします。
👉 サーバーアプリのような「1回起動したらずっと動いている」前提は通用しません。
👉 画面の再生成や状態保存を意識してコーディングする必要があります。
4. リソース(文字列・画像など)がすべて外部管理されている
- Javaのように直接
"文字列"
やnew ImageIcon("path")
などではなく、res/
ディレクトリにあるファイルに定義しておき、R.string.app_name
やR.drawable.icon
などで参照します。
👉 多言語対応や画面サイズの違いに柔軟に対応するための設計です。
5. 非同期処理が日常的に必要
- メインスレッド(UIスレッド)でネットワーク通信や重い処理を行うと、アプリがフリーズしてOSから強制終了されます。
- そのため、非同期処理(スレッド、Handler、Coroutineなど)の理解が不可欠です。
👉 「ユーザーが触る画面」は非常に繊細な環境で動いていることを意識しましょう。
6. メモリとバッテリーは有限資源
- Androidはバッテリー駆動、メモリ制限、バックグラウンド制限などが厳しく、Javaのサーバーアプリよりはるかに制約の強い環境です。
- メモリリーク(例:Contextの不適切な保持)や無限ループのような処理は、すぐにクラッシュやバッテリー消耗の原因になります。
👉 パフォーマンスと省リソースを前提とした設計が求められます。
まとめ:最初は「思った通りに動かない」と感じるかもしれない
Androidは、Javaで書けるとはいえ、「アプリがどこから始まり」「誰が制御しているのか」が大きく異なります。
まずは**「OSの流れに乗る」という感覚**を掴むことが、スムーズな学習の第一歩です。