Androidアプリ作成の基本“Activity”とは何か?:Androidで動く携帯Javaアプリ作成入門(2)(2/2 ページ)
本連載で、SDKとEclipseを使ってAndroidの携帯端末で動くJavaアプリを作成し、Android Market配布を目指しましょう。開発者向け実機の登場やOHA参加14社増などの話題で盛り上がるAndroid。今回は、基本Activityとライフサイクルについて。
ライフサイクルの動作を確認してみよう
以下のアプリをダウンロードしてEclipseにインポートしてください。
2011年9月23日追記「Androidのバージョン違いによるサンプルの動作について補足」
サンプルコードをEclipseにインポートすると、以下のようなコンパイルエラーが発生することがあります。
このエラーは、過去のAndroid Development Toolkitと最新のそれでは、仕様が異なることに由来しています。
2011年9月23日時点の最新の環境(Eclipse:3.7.0、ADT:12.0.0)での対応方法を以下に示します。
【1】プロジェクトに新規ファイルを作成
ファイル名は「default.properties」とします。
これは、新しいADT自動生成されるファイルで、AndroidのAPI Levelを指定する役割があります。このファイルに、以下のように1行追加します。
target=android-10
「android-10」の部分は、対象のAndroidのバージョンに合わせて変更してください。
Androidバージョン | ターゲット表記 |
---|---|
Android 1.5 | android-3 |
Android 1.6 | android-4 |
Android 2.1-update1 | android-7 |
Android 2.2 | android-8 |
Android 2.3.1 | android-9 |
Android 2.3.3 | android-10 |
Android 3.0 | android-11 |
Android 3.1 | android-12 |
Android 3.2 | android-13 |
表 Androidバージョンとターゲット表記 |
default.propertiesを保存すると、プロジェクト内が以下のような状態になります。
【2】「R.java」を削除
古いADTではR.javaは開発者のソースコードと同じフォルダに生成されていましたが、新しいADTでは、「gen」という別のフォルダに作成されるようになりました。
自動生成されたgenフォルダのソースコードが、元からあるR.javaと衝突してコンパイルエラーになっています。元からあるR.javaは削除してください。
このアプリは、Activityのイベント通知を受けるメソッドで、以下のようにToastクラスを用いて簡単なメッセージを表示しています。
@Override protected void onPause () { super.onPause (); Toast.makeText(this, "onPause()", Toast.LENGTH_SHORT).show(); }
Androidシミュレータで実行してToast.show()メソッドが呼び出されると、画面に小さなメッセージが表示されます。
Toastは、呼び出し元のActivityが表示されていなくても表示されるので、ユーザーへの通知やデバッグなどに何かと便利です。
さて、アプリを実行すると、状態は「開始」から「実行中」まで遷移し、onCreate()、onStart()、onResume()のToastが順番に表示されることが確認できたと思います。
では、実行中の状態で下記の「通話」マークのボタンを押してみてください。
このボタンを押すと、電話発信を行うPhone Activityが起動して、元から起動していたActivityが停止状態になりonPause()、onStop()が確認できたと思います。
onStop()が呼び出された後、Activityは停止状態になります。この停止状態では、ほかのアプリの影響を受けていつでも終了したりメモリが解放されたりする可能性があるので、それらを考慮してプログラミングしなければなりません。
さて、今度はPhone Activityで下記の「戻る」マークのボタンを押してみてください。
元のActivityに戻って、onRestart()、onStart()、onResume()が確認できたと思います。
onStop()からの遷移は、今回は右側の経路を通りましたが、左側の「強制終了」を経由することもあります。どちらを経由するかは、停止中のアプリのメモリ使用量と、そのほか動作しているアプリのメモリ使用量によって変わってきます。
左右どちらの経路をたどったにしても、アプリは再び実行中になりました。ここでまた、先ほどの「戻る」マークのボタンを押してみてください。onPause()やonStop()が確認できたと思います。場合によってはonDestroy()も表示されたかもしれません。
Androidはアプリを起動してActivityが呼び出され、そのActivityから別のActivityが呼び出されると、Activityがヒストリースタック(履歴)に積まれていきます。先ほどの「戻る」マークのボタンでヒストリースタックをさかのぼり、ホームスクリーンまで戻るとヒストリースタックは空になります。
Activityを上手にコントロールするには?
Activityの状態が変更されたタイミングでイベントを受け取るコールバックメソッドは、前述の状態遷移図で紹介しましたが、それら以外にもライフサイクルをコントロールするためのメソッドが用意されているので、一部を取り上げて紹介します。
メソッド | 概要 |
---|---|
public void finish() | Activityを終了させる |
public boolean isFinishing() | finish()メソッドで終了中かどうかを判定する |
public void onLowMemory() | システム全体で空きメモリが少なくなったら呼び出される |
表 ライフサイクルをコントロールするために使用したいメソッド |
finish()メソッド
finish()メソッドは、Activityを終了させるのに使用します。冒頭で説明したとおり、ActivityはAndroidアプリの画面に当たります。1つのアプリで複数の画面を持つ場合、A画面からB画面を呼び出して、B画面からA画面に戻る際にB画面のfinish()を呼び出すということもよくあります。
isFinishing()メソッド
isFinishing()は、finish()によって状態遷移しているのかそうでないのかを判定します。onPause()でisFinishing()を使用し、必要に応じてアプリの状態を保持するのがよく見られる使い方です。
onLowMemory()メソッド
onLowMemory()はシステムの空きメモリが足りなくなった場合に呼び出されます。このメソッドが呼び出されたら、必要なオブジェクト以外は“破棄”するようにしましょう。このメソッドが呼び出された後に、ガベージコレクションが実行されます。
ActivityはAndroidアプリの基本の“き”
今回はActivityのライフサイクルについて習得しましたがいかがでしたでしょうか。これで、Activityの“半分”をマスターした形です。
次回は画面(Activity)を複数持つアプリを作成し、画面間(Activity間)を行き来しながら情報を受け渡しする、UIイベントも駆使した、だけどシンプルで簡単なアプリを実際に動かしながらActivityの残り半分をマスターしていきましょう。
- グーグルのAPIを使うときに欠かせないGoogle OAuthの作り方と使い方
- 細か過ぎて伝わってないけど開発者が知っておきたいAndroid Mの新機能まとめ
- 腕時計から電話をかけるAndroid Wearアプリの作り方
- Android Wear用アプリの花形、時計アプリ「Watch Face」の基本的な作り方
- Android 5.0発表&スマホと連動する音声認識Android Wearアプリの作り方
- ウェアラブル端末用Android Wearアプリ開発の基礎知識
- 変わらないと生き残れないAndroid Lの新機能まとめ
- Android WearやIoTで注目のAndroidセンサー機能8選
- ウェアラブル時代に見直したいAndroidの加速度/重力センサー、ジャイロスコープ
- あなたの知らないAndroid SDKの便利tools、14選まとめ
- Android 4.4のメモリ使用状況を把握する3つのツールの使い方
- Androidでリアルタイムマルチプレーゲームを開発するには
- 低性能端末でも使えるか? Android 4.4 KitKatの新機能39選
- もはや無料BaaS。ゲーム以外でも使いたくなるGoogle Play Game Servicesのデータ管理機能
- アプリにGoogle+のソーシャルグラフを持ち込めるGoogle Play Game Servicesの基礎知識
- あなたのアプリはクラウドにデータをバックアップできますか?
- Eclipse ADTに代わるIDEとなるか? Android Studioの基礎知識
- ActionBarで、アプリのUIはこんなにスマートになる
- Android 4.x時代のアプリにないと残念なActionBarとは
- 動的クラスローディングでAndroidアプリ“裏”開発
- Android 4.xのAndroidビームをアプリに組み込むには
- AndroidアプリでNFCタグを読み書きするための基礎知識
- 新タブレット時代を見据えるAndroid 4.2の新機能9選
- Androidからイヤフォンやヘルス機器とBluetooth通信するには
- Bluetoothを使ってAndroidアプリ同士で通信するには
- Androidアプリをアプリ内購読に対応してもうける方法
- 開発者が知らないと残念過ぎるAndroid 4.1の新機能36選
- Androidのプロセス間通信を自由自在にするAIDL
- Android 4.0のサービス/プロセス間通信の基本
- Androidアプリでマルチメディアを扱うための基礎知識
- Androidのウィジェットにノーティフィケーションするには
- Android 4.0で注目の顔認識をアプリに組み込むには
- Android 4.0でアプリ開発を始めるための環境構築
- 開発者が知らないと損するAndroid 4.0の新機能44選
- Android Compatibility packageで2.x系でもマルチサイズ対応
- Androidの画面の大きさの違いを解決するFragments
- Android 3.0の新APIで簡単ドラッグ&ドロップ実装
- 開発者が知って得するAndroid 2.3の新機能18選
- アニメーションでAndroidに独創的な画面エフェクトを
- Androidアプリで“アニメーション”するための基礎知識
- XMLレイアウトでAndroidアプリに“設定画面”を追加
- 開発者が知っておきたいAndroid 2.2の新機能12連発
- もはやケータイに必須のカメラをAndroidで制御しよう
- 地図/位置情報/GPSを使うAndroidアプリを作るには
- Android NDKでJNIを使用してアプリを高速化するには
- Android 2.1の新機能「Live Wallpaper」で作る、美しく燃える“待ち受け”
- iPhoneより多彩なAndroidのセンサをアプリで操作
- SurfaceViewならAndroidで高速描画ゲームが作れる
- Android 1.6のジェスチャーとテキスト読み上げを使う
- Androidのホーム画面に常駐するアプリを作るには
- Netbookにも広まるAndroidで、かつてないWeb体験を
- アプリを国際化してAndroid Marketから世界へ発信
- 常駐アプリが作成できるAndroidの“サービス”とは
- AndroidでSQLiteのDB操作をするための基礎知識
- Androidアプリの使いやすさを左右する5つのレイアウト
- 簡単でワクワクするAndroidウィジェット10連発!
- ブラウザや地図、ストリートビューの基、Intentとは?
- Androidアプリ作成の基本“Activity”とは何か?
- Android Market配布を目指しEclipseでHelloWorld!
Copyright © ITmedia, Inc. All Rights Reserved.