Activityが増えちゃう、Activityファイルの行数が多くなってしまう

WEBエンジニアは、サイト内の画面遷移 = 処理ファイルの移動 と認識する事が多い。

WEBサイトの構築の仕方によりけりだが、最も簡単な画面遷移方法は、画面A(http://ほげ/a.php)から画面B(http://ほげ/b.php)に aタグでリンクをする方法でしょう。
画面Aの処理の a.php 、画面Bの処理の b.php というようにファイルを2つに分ける方法が一般的だと思われます。
(スマーティなどのテンプレートエンジンはもっと効率化されてますが)

この考え方をそのままAndroidに適用すると、AaaActivity.java というアクティビティから Intent でBbbActivity.java に遷移する というやり方になりがちです。

この方法だと1画面ごとに処理が記述でき、WEBエンジニアには分かりやすいかもしれませんがActivityが沢山増えてしまいます。

じゃぁ画面遷移はどうやるの? という疑問が出てくるかもしれません。

画面遷移というのはつまり、画面が切り替わるということなのでActivityを変える必要はありません。

見た目に関しては View を切り替えると考えると良さそうです。

呪文のようにActivityのonCreateで記述していた
setContentView(R.layout.main);

という一文は res/layout/main.xml を読み込み画面に表示するぞ という準備です。

ということは ボタンをクリックしたときに、画面の見た目をhogehoge.xmlに変化させるには、OnClickの中に setContentView(R.layout.hogehoge); を記載すればよい

また、IntentでActivityを遷移すると 「クリアボタン」 で戻ることができる画面遷移になり、いま見ているディスプレイの後ろにIntent遷移元の画面が隠れて居る状態なので、メモリを保持し続けなければならず、Intentを立ち上げすぎてメモリオーバーで「強制終了しました」のエラーが起こりえます。

また、少し難しい処理をActivityにベタっと記述すると、Activityファイルがとても長いファイルになり可読性も落ちるので、Activityをextendsしない普通のクラスファイルに処理を記述するのが良さそうです。
普通のクラスファイルの置き場もActivityと同じ場所におく事が普通です。

例えば、helloというプロジェクトにの場合は
hello/src/jp.example.hello/ 配下に Hogehoge.java というクラスを置く、と決めます。
クラスファイルの頭文字は大文字が主流っぽいです。アッパーキャメルケースですね。
例) hello/src/jp.example.hello/Hogehoge.java

もしくは hello/src/jp.example.hello.hogehoge/ というディレクトリを作成し、そこにhogehogeという処理に関わるファイルを設置するというのも主流です。
例) hello/src/jp.example.hello.hogehoge/LoadImageTask.java

ちなみにhogehogeとかホゲホゲとは 抽象的な何々の〜の意味です。

筆者は以下のように心がけて構築しようと思います。

  • Activityファイルは量産しない
  • IntentでのActivity間の画面遷移は必要最小限にする
  • Activityに処理を長々と書かず、クラスファイルに分ける
  • 共通の処理はクラスファイルに分ける

これらの方法で 画面遷移 = アクティビティの切り替え というWEBエンジニアが陥りやすい構築方法を改善していきます。

何かボタンを押した時に、WEBサイトでは URL が切り替わるというのが一般的です。

最近のWEBでは何かボタンを押した時に Ajaxで処理ファイルAPIに通信し次の挙動を起こすという方法がありますが、古き良き時代のHTMLの構造では基本的にはURLを遷移し異なるページを閲覧させます。

HTMLファイル や CGI が切り替わる仕組みが頭にあると、Android開発に置いても 画面が切り替わる = アクティビティが切り替わる と考えがちです。

そうなると 30パターンの画面遷移があると 30個アクテビティが出来てしまいます。

このような構築方法で開発し実際に実機でテストしてみると分かるのですが、遷移し続けてメモリオーバーで強制終了になることが多いです。

どおやらこの方法は違うな?と気づいた頃にはアクティビティで溢れていることでしょう。

WEBエンジニアの方でも、APIを多用しAjax通信で1枚の画面の中で完結するようなWEBサイトを作れる方は感覚をつかみやすいかも知れません。

・画像やボタンを表示される目に見えるHTML部分が「View」
・ボタンをおした時のjavascriptのAjax通信する部分を「イベント」
・通信されるAPIファイルが
・Ajax通信して帰ってきた値を処理する部分が「イベントリスナー」

「イベント」はユーザーが画面をクリックやタッチやロングタップやダブルクリックや画面を傾けたり等をする事です。

「イベントハンドラ」は「イベント」が起こったこらどうするかを判断(ハンドリング)する部分です。

「イベントリスナー」のリスナーは「聞き手」という意味ですが、「ボタンが押されたので処理をお願いします」という意見を聞いて処理をする部分です。

参考)http://www.edu.tuis.ac.jp/~yamasaki/mobileApp/Android_event.html


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です