5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Androidアプリエンジニアがアプリの設計を見直してみた

Posted at

Andoridアプリの設計に関して、今一度

  • ActivityとFragment
  • Activity Lifecycle
  • MVVM設計って?

といったあたりを再確認してみました

ActivityとFragment

Activityは、アプリの画面を表示するためのコンポーネントであり、各Activityにはユーザインタフェースを表示するためのウィンドウが与えられます。一般的にはウィンドウは画面と同じ大きさになりますが、画面より小さくしたり、他のウィンドウ上にフローティングさせたりすることもできます
一方で、Fragmentは、Activityのもつユーザインタフェースや機能の一部を表現するもので、1つのActivityに複数のFragmentを組み合わせてビルドしたり、複数のActivityで1つのFragmentを再利用したりもできます。独立したライフサイクルを持ち、Activityの処理によって追加・削除が可能です

Fragmentの登場

Fragmentはタブレット用に開発されたAndroid3.0から導入されたもので、Fragmentを用いることでタブレットのような大きな画面サイズに対しても、Activityで無理やりユーザインタフェースを変えて複雑な処理を行わずに済むようになりました

ActivityとFragmentの使い分け

以前は、画面のユーザインタフェースやそれを操作するロジックの多くはActivityに集中してしまい、Activityの肥大化、可読性の低下を引き起こしていました
しかし、Fragmentの登場によって、画面ごとのロジックやインタフェースはFragmentに記述できるので、ActivityはFragmentを管理するだけで済むようになり、複数画面の表現も1つのActivityで可能となりました
Fragmentはいわば、Activityを単純化させてくれる優れものだったわけです

Activity Lifecycle

image.png

onCreate()

Activityが最初に起動されたときに呼ばれます
レイアウトの作成など、最初に1回だけ実行される初期処理などはここで行います

onStart()

Activityが表示される直前であることを示しています
onCreate()とは異なり、Activityのライフサイクルの中で繰り返し呼ばれる可能性があります

onResume()

Activityがユーザの操作を受け付けるようになる直前で呼ばれます
アプリ内の他のActivityから復帰してきた際にも呼ばれます

onPause()

Activityがバックグラウンドに移行する直前で呼ばれます
アプリ内の他のActivityに遷移する際にも呼ばれます
また、onPause()呼び出し後には、メモリ不足によってプロセスが終了してしまう可能性があるため、onPause()ではアプリの永続化データを保存する必要があります

onStop()

Activityがユーザからまったく見えなくなった後に呼ばれます
メモリ不足でプロセスを終了させられた場合には、呼ばれません

onRestart()

onStop()の後、Activityが再度表示される場合に呼ばれます
ホームボタンなどでアプリがバックグラウンドタスクになり、再びフォアグラウンドタスクになった際に呼ばれます

onDestroy()

Activityが破棄される直前に呼ばれます
メモリ不足でプロセスを終了させられた場合などには、呼ばれない可能性があります

MVVM設計って?

ご存知の通り、よく知られたMVC(Model-View-Controller)の派生形と言われています

image.png

  • View
    • 画面の表示を担い、Activity/Fragmentやxmlが該当します
  • ViewModel
    • ViewとModel間の情報の伝達、およびViewのための状態保持を役割とします
    • プレゼンテーションロジックを表現し、ボタンタップ時の処理などをコマンドとして保持します
  • Model
    • ドメイン領域を担い、データの操作やビジネスロジックの処理が記述されます
    • UIに依存しないロジックを扱います

MVCとの違い

MVCではViewがModelを直接参照していたのに対し、MVVMではViewとModelの間にViewModelという中間層が置かれます

image.png
(引用) https://qiita.com/shinkuFencer/items/f2651073fb71416b6cd7

双方向DataBinding

  • Viewは常にViewModelの状態を参照し、ViewModelが変更になればViewの表示も変更されます
  • また、ViewModelもViewを常に監視し、Viewに何かしらの入力があれば即座にViewModelの状態も変更されます

このようにMVVMは、
DataBindingによってデータそのものを共有して取り扱う考え方なのです

5
5
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
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?