2007/03/04開始。ソフトウェア管理やDelerer SEの作者であるおにぎりくんの試行錯誤の記録です。
- [Vue.js]時計?タイムコードを表示するWebアプリ
- (2021/11/16)
- ポエム
- (2020/09/30)
- メトロノームアプリをリリース
- (2017/04/22)
- Sikulix勉強中:便利関数
- (2017/02/25)
- [JavaFX]学習メモ
- (2016/09/22)
Androidアプリを作成する中でよく目にするのが、Activity#onCreate(Bundle)です。
Activityのサブクラスを作って、その中でオーバーライドするのは、定形業務みたいなものですね。
このonCreateメソッドについては、「オーバーライドするなら、スーパークラスの実装を呼びださなければならない」とドキュメントに書いてあります。スーパークラスの実装ではどんなことをしているのでしょうか。ソースを見てみましょう。
Activityのサブクラスを作って、その中でオーバーライドするのは、定形業務みたいなものですね。
このonCreateメソッドについては、「オーバーライドするなら、スーパークラスの実装を呼びださなければならない」とドキュメントに書いてあります。スーパークラスの実装ではどんなことをしているのでしょうか。ソースを見てみましょう。
ソースコードは、いつも利用しているこちらを使用しています。
http://sites.google.com/site/devcollaboration/codesearch
http://tools.oesf.biz/android-2.2_r1.1/xref/frameworks/base/core/java/android/app/Activity.java
800 protected void onCreate(Bundle savedInstanceState) {
801 mVisibleFromClient = !mWindow.getWindowStyle().getBoolean(
802 com.android.internal.R.styleable.Window_windowNoDisplay, false);
803 mCalled = true;
804 }
なんと、3行しかありません。
ここでやっているのは、mVisibleFromClientとmCalledフィールドにtrue/falseを代入しているだけです。
onCreate
onPostCreate
onStart
onRestart
onResume
onPostResume
onPause
onStop
onDestroy
onConfigurationChanged
onLowMemory
これらのメソッドをオーバーライドするなら、「スーパークラスの実装を呼びださなければならない」なんですね。
"!mCalled"で検索すると、呼び出しをチェックしている箇所が見つかります。performResumeなどのメソッドですね。
http://sites.google.com/site/devcollaboration/codesearch
■onCreateの実装
Activity.javaを検索すると、ソースコードが見つかります。http://tools.oesf.biz/android-2.2_r1.1/xref/frameworks/base/core/java/android/app/Activity.java
800 protected void onCreate(Bundle savedInstanceState) {
801 mVisibleFromClient = !mWindow.getWindowStyle().getBoolean(
802 com.android.internal.R.styleable.Window_windowNoDisplay, false);
803 mCalled = true;
804 }
なんと、3行しかありません。
ここでやっているのは、mVisibleFromClientとmCalledフィールドにtrue/falseを代入しているだけです。
■スーパークラスの実装を呼び出さなければならない
"mCalled = true;"はActivity.javaの中に幾つか見つかります。onCreate
onPostCreate
onStart
onRestart
onResume
onPostResume
onPause
onStop
onDestroy
onConfigurationChanged
onLowMemory
これらのメソッドをオーバーライドするなら、「スーパークラスの実装を呼びださなければならない」なんですね。
"!mCalled"で検索すると、呼び出しをチェックしている箇所が見つかります。performResumeなどのメソッドですね。
■フラグをセットしているだけ?
onCreateは処理が短くてわかりやすいですが、対してonDestroyは何か別の処理をしていそうです。調査継続します。PR
スポンサード・リンク
この記事にコメントする
フリーソフト指向::開発日記 by LapisCactus