Androidアプリでのモデル表現方法を考える

一般的にアプリケーション開発にあたっては、扱う対象のデータモデル化が必要ですから、Androidアプリを開発するにあたっても、同様のことがいえます。その際、モデル化したデータをアプリケーションでどのように表現するのか考えることになります。簡単なAndroidアプリを開発するにあたり、どんな方法がありそうか考えたので、ここにメモをしておきます。


単純なアプリ
画面が1つしか無いようなシンプルなアプリケーションでは、Activityを拡張したクラスのフィールドとして保持するのが単純でよいでしょう。画面描画をするにせよ、何か処理をするにせよ、Activity経由となりますから、そのフィールドとしておけば、困ることはないはずです。

複数のActivityを持つアプリ
複数のActivityを持つアプリでモデル情報を共有するには、いくつか方法があるので用途に応じて検討する必要がありそうです。

  • a) Singletonクラスを用意して共有する
  • b) Applicationクラスを拡張して独自クラスを用意して共有する
  • c) 独自ContentProviderクラスを用意して共有する
  • d) Intentでオブジェクトを引き渡す方法で共有する
  • e) その他(SharedPreference, File, SQLite)

GoFのデザインパターンを知っているなら、「a) Singletonクラスを用意して共有」というSingletonパターンを使う方法が一番手軽でしょう。専用クラスを追加するだけなので、わかりやすいですし、使いやすい方式です。

「b) Applicationクラスを拡張して独自クラスを用意して共有する」という方法も、それなりにお手軽です。Singletonパターンは一度パターンを学ぶ必要がありますが、こちらはオブジェクト指向プログラミングを知っていれば誰でもできるクラスのextendsを使うだけですから、より簡単です。また、Singleton パターンの場合はアプリケーション内のどのオブジェクトからでもアクセス可能なオブジェクトを提供することになりますが、こちらの場合はApplicationオブジェクトへアクセスできるオブジェクトだけが利用できるという制限もつきます。なお、Applicationクラスを拡張した独自クラスを用意するだけでなく、AndroidManifest.xmlへ独自Applicationクラスの登録も必要ですから、気をつけましょう。各Activityオブジェクトから独自Applicationオブジェクトを参照するには、Context#getApplication()を使います。

「c) 独自ContentProviderクラスを用意して共有する」という方法は、ファイルリソースやDBに格納したデータを共有したいときに使います。将来、他のアプリケーションへもデータを提供したいと考えているなら、画面間で共有するデータについても独自ContentProviderクラスで処理するようにしておくのが良いかもしれません。単純に画面間のデータ共有をするには、大袈裟な仕組みです。とはいえ、音楽データや動画データのようなものはメモリ上に展開しっぱなしというわけにもいかないですし、大量のデータはDBへ格納して一部のデータだけメモリ上に置いておきたいはずです。そういったデータについては、この方法を採用するのが良いでしょう。

「d) Intentでオブジェクトを引き渡す方法で共有する」という方法は2つのActivityクラス間で情報のやりとりをしたいときに使います。a)からc)まではどのActivityクラス間でもデータ共有をしたい場合のものでしたが、こちらは、別のActivityを呼び出すときにパラメータで情報を渡して共有するという方法になります。利用するデータが2つのActivityクラス間でしか意味を持たないようなものなら、この方法も選択肢のひとつとなります。

「e) その他(SharedPreference, File, SQLite)」は基本的にデータの永続化と話が結びついています。永続化されたデータを使うことで、データの共有は可能ですが、I/Oが発生するので、メモリ上だけで処理をするよりも性能的に不利となるはずです。また、データ共有のためのコードが各Activityクラスに散乱するといったことになりやすいでしょう。対象となるデータをできるだけ永続化しておきたい場合で、かつ、I/Oなどによる処理負荷もそれほど気にならない場合には、この方法も検討すると良いでしょう。

とりあえず気がついた範囲で記載してみました。(使い分けしよう!Androidアプリケーションにおけるデータ保持の方法(1)へ続く)

同じタグの記事: Android
同じタグの記事: Java
同じカテゴリの記事: Android
関連書籍: Android
関連書籍: Java