Android application development 第2章:Javaエンジニアから見たAndroidの特徴と注意点

あなたはすでにJavaの文法やオブジェクト指向、クラス設計、例外処理、スレッドといった基本概念を理解しているはずです。
Androidアプリの開発でもJava(またはKotlin)が使われるため、クラスの書き方やメソッドの記述に関しては、大きな違いはありません。

しかし、Androidアプリの開発には、これまでと違った設計思想や制約、習慣的な書き方が多くあります
以下に、その代表的な点を「Javaの常識」と対比しながら紹介します。


1. mainメソッドは存在しない

■ Javaの常識:

main(String[] args) { // ここがエントリーポイント }

■ Android:

  • main()は存在しません。
  • アプリのスタート地点は ActivityonCreate() メソッドなどです。
  • 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_nameR.drawable.icon などで参照します。

👉 多言語対応や画面サイズの違いに柔軟に対応するための設計です。


5. 非同期処理が日常的に必要

  • メインスレッド(UIスレッド)でネットワーク通信や重い処理を行うと、アプリがフリーズしてOSから強制終了されます。
  • そのため、非同期処理(スレッド、Handler、Coroutineなど)の理解が不可欠です。

👉 「ユーザーが触る画面」は非常に繊細な環境で動いていることを意識しましょう。


6. メモリとバッテリーは有限資源

  • Androidはバッテリー駆動、メモリ制限、バックグラウンド制限などが厳しく、Javaのサーバーアプリよりはるかに制約の強い環境です。
  • メモリリーク(例:Contextの不適切な保持)や無限ループのような処理は、すぐにクラッシュやバッテリー消耗の原因になります。

👉 パフォーマンスと省リソースを前提とした設計が求められます。


まとめ:最初は「思った通りに動かない」と感じるかもしれない

Androidは、Javaで書けるとはいえ、「アプリがどこから始まり」「誰が制御しているのか」が大きく異なります。
まずは**「OSの流れに乗る」という感覚**を掴むことが、スムーズな学習の第一歩です。

mh

Related Posts

Android application development 第9章:イベントリスナーの定義(Java視点からの違和感に注意)

Androidアプリでも、JavaのGUI開発と同様に「ユー…

Android application development 第8章:XMLによるUI記述とコードの連携

■ なぜXMLでUIを書くのか? Androidアプリでは、…

You Missed

Kubernetes Learning 第5章:kubectl の基本操作(get / describe / logs / exec)

  • 投稿者 mh
  • 5月 9, 2025
  • 6 views

Android application development 第9章:イベントリスナーの定義(Java視点からの違和感に注意)

  • 投稿者 mh
  • 5月 9, 2025
  • 5 views

Android application development 第8章:XMLによるUI記述とコードの連携

  • 投稿者 mh
  • 5月 8, 2025
  • 20 views

Kubernetes Learning 第4章:Kubernetesを触ってみよう(最小構成で試す)

  • 投稿者 mh
  • 5月 8, 2025
  • 22 views

Android application development 第7章:ViewとViewGroup、Layoutの基本的な考え方

  • 投稿者 mh
  • 5月 7, 2025
  • 21 views

Kubernetes Learning 第3章:Dockerとの関係

  • 投稿者 mh
  • 5月 7, 2025
  • 18 views