C#で開発していたはずなのに、いつの間にか未経験のJava,Android開発に携わることになってしまった。
正直わからないことだらけなので、気になったことをまとめてみようと思う。僕みたいな初心者の人でもパッと掴めるように出来るだけわかりやすく簡潔に。
とりあえず通勤時間使ってまとめてます。
時間がある時にイメージがつきやすい図もつけようと思う。
まずはActivityから
目次
Activityってなんや
ざっとディベロッパー(公式)サイトを見た。
Activityを簡潔に表現すると、
『ユーザーが操作できる画面』
らしい。アプリって呼んでるソレはActivityの集合体なんやと。
こんな感じでバーっと並んでるイメージかな。(後々画像追加します)
公式サイトを見ているとActivityは2種類あるとも書かれていた。
Main Activityとそれ以外のActivityの2種類
いっぱいある画面(Activity)の中でも、起動時に表示する(される)画面はMain Activityになる。
それ以外はただのActivityになる。
Main Activityは起動して最初に実行される関数、C言語のMain関数に近い。と言えばイメージつきやすい。
最初に表示されるだけでメインって呼ばれるとかずるくない?と思っていたけど、メインはメインで、結構重要な役割を持つ。
フォアグラウンド(foreground)サービスとかバックグラウンド(background)サービスの起動とか、要はアプリを動かすための準備をしてたりする。
初回以外操作する必要がないようなソケット通信とかはここでしている。(のかな?)
Activityのライフサイクル
Activityは画面、ということは画面遷移したら前のActivityはどうなっちゃうの?と気になった。
答えは、停止する。
停止したActivityはスタックに維持される。後入れ先出しなので、前の画面の上に新しい画面積まれていくイメージ。
戻るボタンを押すと、上の画面が破棄されて下にある画面が表示される。
ただし、ひとつだけ注意点が。
スタックしきれなくなったActivityは消されてしまう
らしい。
例えば、メモ帳に何か書き込んで保存せずにいっぱいアプリを立ち上げたとする。
すると、メモリ不足でActivityをスタックしきれなくなり、いつの間にかメモ帳のActivityが消える。
途中まで書いてた文も全部消えてしまう。
(なんとなくやけど、こんな経験したことがあるぞ…)
Activityの停止タイミングで保存する処理を入れる必要が…。
Activityの状態変化はコールバックで通知される
次のActivityへと移動する時に、前のActivityは停止する。
ここで前のActivityにのみ注目してみると、
活動状態(アクティブ)から停止状態(ディアクティブ)へと状態が変わっている。
要は状態変化。
この状態変化が起きた時にコールバックでそれが通知される。
Activityの停止タイミングで保存する処理を入れる必要が…。
は、コールバックの通知をトリガーに保存処理を入れると理想的なタイミングで必要な処理を実行することができる。
onCreate()
Activityを立ち上げた時に最初に呼ばれるメソッド。
なので、Activityを作る時には絶対に書いておかなければいけない必須メソッド。
Activityクラスを継承したユーザー定義クラスはonCreateメソッドを持っている。Activityを継承したそれぞれのクラスでoverrideして必要な処理をさせる。
ユーザー定義のActivityを読み解くならここから見るべきか。
Bundle savedInstanceState
onCreateは引数にBundle savedInstanceStateが定義されている。
『大体がnull許容型で書かれているから特に気にする必要なくnullと思っておけばいい』って言われた。
ちょっと納得できなかったので、調べてみると、
Activity復元用データらしい。
Activityはメモリ不足以外に、画面を回転させた時にも破棄される。(回転しただけで破棄されるって何事…)
画面回転させただけで、編集中のメモ帳が消えたら困るのでActivityを破棄するときにBundle savedInstanceStateにそのインスタンス情報を保存しておく。
保存にはonSaveInstanceStateメソッドを使う
そうすることで、回転後の画面でも回転前のデータを引き継げる。
Intent
簡単に言えば、ActivityとActivityを、Activityとアプリケーションを繋いで情報をやり取りするためのデータボックスのようなもの。
Intentに関しても、Androidでかなり重要な要素になるので別記事で詳しくまとめようと思います。
(……続きは明日の通勤時間に)
お願い+α
Androidどころかjavaの経験もないので間違ってるところもあるかもしれないです。
ここおかしい!というところはコメントでバンバン指摘していただけると助かります。
ちなみに技術系カテゴリはトップページに出ないようになってます。
カテゴリ一覧から技術系を選択してもらえると記事一覧が表示されます。
え?口調が変わってないかって?
技術系カテゴリなので口調もそれっぽく技術者ぶってるんですよ。