素人のアンドロイドアプリ開発日記

Activityのライフサイクルについて考える

2011.02.15

Activityのライフサイクルについて考えたいと思います。

activity_lifecycle

アンドロイドアプリはextends Activityという文言をclassに付加をさせる事がデフォルトとなっていますが、基本的には全てのアンドロイドアプリは、Activityクラスを継承してライフサイクルを行います。

 public class Activity extends ApplicationContext {
     protected void onCreate(Bundle savedInstanceState);
     protected void onStart();
     protected void onRestart();
     protected void onResume();
     protected void onPause();
     protected void onStop();
     protected void onDestroy();
 }

通常の動作ではまず、onCreateを実行していました。

その他のイベントの実行のタイミングを考えていきたいと思います。

 

onStart

1、onCreateの後に実行がされます。

2、onStopの後にonRestartを経て、前面に表示された場合。

となります。2に関しては、onStopの実行される理由を考える必要があります。

 

onStop

1、onPauseの後にそのアプリが見えなくなった場合。

ホーム画面に戻ったり、他のアプリ(全画面を使用)のアプリを立ち上げた時に実行がされます。

 

onPause

1、onResumeの後にそのアプリが他のアプリが立ち上がってしまった場合

ふきだしでアラームが出現するなどの場合に実行されるようです。また、onStopが実行される場合にも一度、onPauseで実行がされるようです。

 

onResume

1、onStartの後に実行がされます。

2、onPauseの後になんの問題もなく、アプリに戻った時に実行

※メモリが他のアプリで大量に使われた場合などはすべてがonCreateから実行されます。。

 

onRestart

1、onStopの後にアプリを再度立ちあげた時に実行。

※メモリが他のアプリで大量に使われた場合などは、onCreateから実行。

 

onCreate

1、最初に実行

2、動作が一時中断されて、他のアプリの使用にメモリが使われてしまった後に再度起動した時

 

onDestroy

1、終了ボタンが押された場合に呼び出されます。

 

と、実際に、とても分かりにくいシステムになっていますが、下記に簡単な例を示します。

 

■起動

[onCreate] -> [onStart] -> [onResume]

■起動中に時計のアラーム(ふきだしとか)がなった。アラームをけしてアプリに戻った。

->[onPause] -> アラーム -> [onResume]

■起動中に時計のアラーム(ふきだしとか)がなった。結構メモリを食うアプリのアラームだ。アラームをけしてアプリに戻った。

->[onPause] -> アラーム ->[onCreate] -> [onStart] -> [onResume]

■起動中に電話(電話にアプリの全画面が奪われている)がなった。電話の後にアプリに戻った。

->[onPause] ->[onStop] -> 電話 -> [onRestart] -> [onStart] -> [onResume]

■起動中に、自動で他のアプリが立ち上がった。結構なメモリを食うアプリで、しばらくしてアプリに戻った。

->[onPause] ->[onStop] ->アプリ -> [onCreate] -> [onStart] -> [onResume]

■起動中に戻るボタンでホームに戻って再度はじめた。

->[onPause] ->[onStop] ->[onDestroy] -> ホーム -> [onCreate] -> [onStart] -> [onResume]

 

一度動作の仕方を確認するとライフサイクルの図がとてもわかりやすく書かれているんだとわかりました。

 

下記サイトを参考にさせていただきました。

初心者がAndroid開発をはじめました ライフサイクルの動作を確認

同じカテゴリの記事を紹介します

流れる背景を作るステータスバーの色を好きな色にするカメラの権限の取得をするpush通知の実装を確認をする為に、phpを書くしかないListView GridViewに下部にマージンをあけたい時よくつかうメモListViewの設定split で ドット文字列を、bitmapにするクラスを作ってみた。uriから画像の回転角度を取得するgridviewとlistviewで表示にalphaanimationを使ったら動かないのが存在する問題自分で変数を持つクラスを作ってコピーした時に参照まで渡してしまう問題でかい画像が表示されない。という問題interfaceをandroidで使ってみるフルスクリーンでナビゲーションバーまで消せるパソコンを買ったらする事点滅をさせるスクリプトJsonObjectを扱う時のtry catchが邪魔なのでシンプルにする2chのまとめアプリは気を付けろArrayAdapterの使い方setTimeOutを作るarraylistを並び替えAndroidの勉強で気を付けるべき6つの事staticで変数を持ちまわす時Androidで定規を作る時にサイズを確認してみる。TextureViewがゴミから神になった日ListViewの位置を変更しないで更新する方法animationをxmlで設定するのはアホなようだ。listを作るのがめんどい件について矩形の中の点の存在条件についてScrollViewのScrollToが効かない時Twitterのアプリを暗黙的Intentで狙いうちの巻勉強した内容をクラスにしてみてるText三角形の座標の包括判定をプログラムで実装前回作ったeasingを使って、translateアニメーションにイージングをかける。AndroidのデフォルトのアニメーションがダサいのでEasingをJavascriptから持ってきたmatrixを使って、回転をさせる時に中心点をずらす方法destoryとかで割と実行してるメモリリーク対策AnimationDrawable 動かないTextViewをセンター寄せにする。特定のアプリがインストールされているかを判別する方法surfacevierをaddviewすると、一瞬画面が点滅する件アニメーションで高さを変更listviewで押すとデフォルトで背景に色がつくのを抑止するline-heightをアンドロイドのtextviewで設定をする。listviewの区切り線を消すframelayoutだとmarginが効かない@android2.2アンドロイドのimageviewで背景が透けるという糞仕様を発見ウインドウのサイズを取得する方法decodeResourceは劣化する上に糞遅い。decodeResourceは劣化します。もう一度言います。decodeResourceは劣化します。

カテゴリー:androidアプリTips

公開中のアプリ、是非ダウンロードしてみてください

2chまとめのたね

RSSを利用してさまざまなブログの情報をキュレーションしてくれるアプリ

インストールする

ひらがな戦記

OPENGL ES2 を利用したカルタのソーシャルゲーム

インストールする