FC2ブログ
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

いろんな記事を書きかけではありますが、気になることが次々と出てくるAndroid。

そんな誘惑に負けつつ、まぁメモだから・・というわけのわからない自己暗示で次へ次へと進んでいきます。


今回はIntentについて書きます。

Intentですが、別の画面とデータのやりとりをするためには必須なクラスです。

別画面を開く場合はIntent。
別画面にパラメータを渡す場合もIntent。
別画面からリザルトを受け取る場合もIntent。

とりあえず、別画面に遷移したり、別アプリに遷移したり、パラメータを交換する場合はIntent使ってねという感じです。

ちょっとだけ技術者っぽいことを書くと、Intentには暗黙的と明示的が存在します。


■暗黙的なIntent

Intent(String action)
Intent(String action, Uri uri)

上記のコンストラクタを使う場合は暗黙的なIntentになります。

action には Intent.ACTION_? といった定数を指定します。
この定数ですが、数がものすごくあります。

調べると良く出てくるものとして、
Intent.ACTION_VIEW
Intent.ACTION_CALL
Intent.ACTION_DIAL

なんかがあります。


uri にはパラメータとなる値を指定します。

Webブラウザを呼び出す場合はURL
地図アプリを呼び出す場合は緯度・経度
電話アプリを呼び出す場合は電話番号

といった具合ですね。

uri の書き方ですが、それぞれのケースで内容が変わります。
・・・これどこかに全部乗ってるのかなぁ。

bg_logo_s.png
※やはり、詳しいことはここですね。

Intent のインスタンスを作成したら、Activity.startActivity(intent)を呼びます。
これでIntentで指定したアクティビティが実行されます。

続けて、明示的なIntentです。


■明示的なIntent

Intent(Context context, Class class)

上記のコンストラクタを使う場合は明示的なIntentとなります。

context にはコンテキスト、class には呼び出し先のクラスを指定します。

例えば、今作成しているアプリでチャットアプリがあります。
チャットの発言色を、別アプリのパレットクラスで選んだ色を反映するという仕様にしています。

それをサンプルに紹介します。

まずはソース。
WS000023.jpg
いきなり、↑で書いたコンストラクタとは違います。

まぁ、こういうやり方もあるということで・・

まず、Intentのインスタンスを作成します。

次に、 setClassName で呼び出し先のクラスを設定します。引数はパッケージと、パッケージ+クラス名です。
※ちなみに、紹介したコンストラクタで書くと、Intent(this, tsukul.palette.palette.class);

そして、渡したいパラメータがある場合は、 putExtra でキー情報に値を紐付けます。
紐付ける値は、 String や Int などです。 Object はどうなんだろう。

最後に、 Activity.startActivityForResult を呼びます。
暗黙の時と違いますが、おそらくどちらでも良いとおもいます。
こちらの場合は、リクエストコードというものを第二引数で渡しています。
これは、呼び出し先のアクティビティから戻ってきたときに返されるコードになります。
つまり、リクエストコードを判定材料に、 Intent の戻り値を処理するかどうか処理分けすることができます。

では、呼び出し先のアクティビティがパラメータを返してきた場合どのように受け取るのか。

それは onActivityResult というメソッドを Override します。
Intent で開いたアクティビティが終了した際に動作するイベントで、この中でパラメータを受け取ります。

onActivityResult(int requestCode, int resultCode, Intent intent)

requestCode は、呼び出す際に指定したリクエストコードです。これが同じなら、処理をするように書きます。

resultCode は処理が成功したかどうかを判定するためのコードです。Activity.RESULT_OK と等しければ処理しましょう。
※余談ですが、定数の中身は -1 です。

intent は、戻り値が入ってます。getIntExtra メソッドを使用して、中身を取り出しましょう。
スポンサーサイト

今回はSurfaceViewに焦点を当てたいと思います。

このクラスの正確なところがまだ良くわかっていないのですが、
書いてくうちに何か閃くかなぁと甘い考えの下やっていきます。

間違い、誤字脱字、あいまいな表現その他もろもろ、ジャロには言わないでくださいね。


では、さっそく。

まず、普通のViewクラスとの違いを列挙したいとおもいます。

・描画が早い。


・・・あれ。大きくまとめると一つになっちゃいました。

SurfaceViewはUIスレッドから独立して描画を行うから早いとのこと。
なるほどねー・・・なんかモヤモヤします。

たとえば、クリックメソッドの中に描画の処理を書いた場合だと、
描画処理が早く終わっても、その後続で別の処理を書いてた場合
その処理が終わるまでクリック処理は抜けられない=描画処理の結果も反映されない。
って事になりますもんね。

そこから独立して描画処理、つまり並行に処理されればクリック処理が終わってなくても描画が終われば表示はされる。

いまいち自信ないです。


というわけで調査調査。



Androidに限らず、プログラムを作成する際に必ず必要になるログ出力。

Androidのログ出力は以下のクラスを使用します。

Logクラスのパッケージは以下の通り
android.util.Log


使い方としては、ログ出力メソッドにタグとメッセージを渡して表示させる。
※タグとメッセージって、引数名まんま・・私センスないなぁ。


実際にログを出力するメソッドは以下のようなものがあります。

■DEBUG デバッグログを出力する場合に用いる。
Log.d ("tag", "message");

■ERROR エラーログを出力する場合に用いる。
Log.e ("tag", "message");

■INFO 情報ログを出力する場合に用いる。
Log.i ("tag", "message");

■VERBOSE verboseを出力する場合に用いる。
Log.v ("tag", "message");
※・・verbose?意味的には冗長とからしいけど、どんな使い方するんだろう。

■WARN 警告を出力する場合に用いる。
Log.w ("tag", "message");


bg_logo_s.png を見るとそれぞれに定数が存在しており、
Log.println (int priority, String tag, String msg)
を中で呼んでいるみたい。

■ Viewクラス とは

まずは基本から。

Viewクラスは画面上に線や四角、丸などを表示させるためのクラスです。
また、静止画なんかも表示するときに使います。

Activity のパッケージは以下の通り
android.view.View

今のとこわかってるのはこんな感じです。


■ Activityクラスとは

まずは基本から。

Android のプログラムは Activity クラスを土台にして作られます。
Android のパッケージを作成したときは、必ず Activity クラスが継承されています。

Activity のパッケージは以下の通り
android.app.Activity


なぜ Activity を継承する必要があるか、それは・・

なんか良くわからないのですが、Activity がアプリの画面に相当するものだからだそうです。
Android では、画面を持たないアプリも作成できます。その場合は Activity の継承は行いません。

つまり、画面を構成するためにはこのクラスを継承しないといけない(詳しい理由はわからないですけど)ということなんですねー。


以前の記事でアクティビティのライフサイクルについて触れましたが、ここで書いてる通りいろんなイベントをオーバーライドすることでアプリケーションに生命を吹き込むんですね。




上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。