- ベストアンサー
コンストラクタとonCreateどちらがベストか
Androidアプリ開発での質問をさせてください。 カレンダークラスから現在日時を取得し、メンバ変数に値を保持する場合 コンストラクタで代入しても、onCreateで代入しても結局は変わらないと思うのですが あえてどちらかを選ぶならどういう理由がありますでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ANo.1です。 > でも再びonCreateが呼ばれるということはアクティビティクラスのインスタンスも2回呼ばれるのではないでしょうか? > メモリ不足で強制終了する場合はGCでアクティビティのインスタンスも破棄される可能性があるという意味でですが。 > そうなると再度onCreateが呼ばれるときにアクティビティのインスタンスが生成されたときにコンストラクタが呼ばれますよね? そうなっている可能性があったので、ANo.1の回答内容に確信が無かったんです。 色々と試してみたのですが、結局同一のインスタンスが 2回onCreateを呼ぶ状況を作る事ができませんでした。 そこで公式のドキュメントを読んでみたのですが、 どうやら2回目にonCreateが呼ばれる場合は、 以前のアクティビティのインスタンスが破棄されており、 新しいインスタンスを生成してonCreateを呼んでいるようです。 http://developer.android.com/guide/topics/fundamentals/activities.html なので現在日時の取得は、onCreateとコンストラクタの どちらでやっても大して変わらない事になりますね。
その他の回答 (1)
- R_Earl
- ベストアンサー率55% (473/849)
アクティビティのライフサイクルの中で、 onCreateが2回以上呼ばれるケースがあったはずです (メモリ不足で強制終了する場合)。 もしonCreateが再び呼ばれてしまうと、 メンバ変数に代入した現在日時が更新される事になると思いますが…。 今開発環境が無いので、本当にそうなるかは確認していません。 時間が取れたら確認してみます。
お礼
onCreateが2回以上よばれるケースがあるんですね! たしかにその場合は意図しない日時が入っちゃいますね。 でも再びonCreateが呼ばれるということはアクティビティクラスのインスタンスも2回呼ばれるのではないでしょうか? メモリ不足で強制終了する場合はGCでアクティビティのインスタンスも破棄される可能性があるという意味でですが。 そうなると再度onCreateが呼ばれるときにアクティビティのインスタンスが生成されたときにコンストラクタが呼ばれますよね? なんかだらだら質問して大変申し訳ありません、 少ない脳みそで考えているとこんがらがってきます。
お礼
なるほど!そういうことだったんですね。 わざわざ詳しく調べていただいてありがとうございました! 今後英語ドキュメントも読めるように頑張ります・・・