アプリ作って海外移住

コピペプログラマーのメモ

Activityのライフサイクル  onCreate() onResume() onPause() の構造でつくろう。

 

 // 注意   onActivityResult→onResumeの順で実行

 

 

Activityのライフサイクル

画面回転時、Activityはライフサイクルに従い、一度onStopを経由しonDestroyされます。回転後、onCreateから画面を再構築します。

 

ということは、onresume で画面のテキストビューを更新させても、回転したら、

初期値になってしまうということ。

 

 

 

 

 

Activityのライフサイクル

androidアプリでは、Activityのライフサイクルを考慮しなければなりません。以下のサイトが参考になります。
 
 
また、次のサイトは何をするべきか、わかりやすく説明されています。
 
このサイトによると、onCreate(), onResume(), onPause()がアプリケーションとして重要であり、なすべきことがある。
それ以外のコールバックは、あまり意味を持たないとある。
 
また、android開発ガイドのActivityの部分は一読しておくべきと考えます。
日本語訳はここにあります。
 
アプリの一生において、いくつかの事象が生じる。その時、Activityでは以下のコールバックが発生する。
 

コールバックメソッド

 事象

 onCreate()  Activityが生成された最初の1回だけ呼び出される
 onStart()  Activityが画面に表示されるときに呼び出される
 onRestart()  ActivityがonStop()の後、復活するときに呼び出される。
 このあと、onStart()が呼び出される。
 onResume()  Activityが前面になる時に呼び出される。
 onPause()  Activityがバックグラウンドに移動するときに呼び出される。
 onStop()  Activityが画面から見えなくなる時に呼び出される。
 onDestroy()  Activityが終わる時に呼び出される。
 
これらのイベントにより3種類のライフタイムが表現される。
 
entire lifetime
    onCreate()で始まり、onDestroy()で終わる。
    バックグラウンドで動くスレッドを使っている場合、onDestroy()で確実に止めること、とある。
 
visible lifetime
    onStart()で始まり、onStop()で終わる。
    この間、ユーザーに表示するリソースを管理せよ、とある。
 
foreground lifetime
    onResume()で始まり、onPause()で終わる。
    この切り替えは頻繁に起こるので、重い処理をしてはいけない、とある。
 
通常、アプリでは次のような処理を行います。
 
Activityを作ったとき
・画面を生成する。
・DBあるいはファイルから情報を取り出す。
・画面に情報を表示する。
 
Activityが閉じるとき
・情報を保管する
 
これらの処理をどのイベントで実施するべきかを検討します。
 
1.onCreate(重要)
 
Activityが最初に起動するときに呼び出される。画面インターフェースの作成や、1度しか行わない最初の初期化処理を記述する。画面回りに関しては、作成するだけで、まだ触ってはいけない。
 
2.onStart
 
Activityが表示される前に呼ばれる。
Activityの遷移で元に戻ったときにも呼び出される。(これは忘れやすい)
 
3.onResume(重要)
 
Activityが前面にきて、ユーザーとのやりとりを始められるようになる直前に呼び出される。
データベースを利用する場合は、ここでデーkouzou タベースに接続する。
 
ここで行うべき処理は、
・データベースに接続する。
・データベース等から必要な情報を取り出す。
・画面に情報を表示する。
 
4.onPause(重要)
 
他のアプリが前面にきて、Activityがバックグラウンドに隠れるときに、呼ばれる。
まだ完全に見えなくなったわけではない。見えなくなると、onStop()が呼び出される。
このコールバックの後には、OSによりkillされる可能性がある。
 
開発ガイドには、ユーザーがこのActivity上で実施したデータ変更は、このタイミングで保存(コミット)しろ、とある。
Activityが持つ情報をファイルやデータベースに保存する処理はここで行うべきとある。
 
データベースに関しては、以下の処理が必要なようだ。
・必要な情報を保存する。
・データベース接続を解放する。
 
onPauseでデータベース接続を解放するということは、
onResumeでデータベースに接続する必要がある。
 
つまり、アプリを通じてデータベースをオープンしっぱなしなのはまずい。
各ActivityのonResume()でデータベースをオープンし、
onPause()でクローズするという扱いが必要になる。
ということは、DBアクセサ等をシングルトンにする意味があまりないか?
 
各Activityは、独立して、閉じたつくりにする必要があると思われる。
 
5.onStop
 
ホーム画面に戻ったり、アプリが見えなくなるときに呼ばれる。
このあと、システムの状態(メモリ不足等)によっては、OSによりActivityが殺される可能性もある。
そのため、いつアプリが停止してもよい状態にしておく必要がある。
ただし、onStop()が呼ばれずに、プロセスがkillされる場合がある。
重要の情報の保管場所としては不適切。
 
6.onRestart
 
終了状態になったActivityが再開するときに呼び出される。このあと、onStart()が呼ばれる。
 
7.onDestroy
 
Activityが破棄される直前に呼ばれる。