Android Activities
には特定のライフサイクルがあり、onCreate
をオーバーライドして初期化に使用する必要があることを理解していますが、コンストラクターで実際に何が起こるか? Activity
コンストラクタもオーバーライドできる/すべきである場合、または決して触れてはいけない場合
Activities
への参照は完全にクリーンアップされないため(したがって、ガベージコレクターを妨害するため)、コンストラクターは使用しないで、onDestroy
はその目的のためにあると想定しています。これは正しいです?
コンストラクターで何かを行う正当な理由は考えられません。アクティビティを直接構築することはないため、それを使用してパラメータを渡すことはできません。通常、onCreateで操作を行います。
ギリのコメントが述べたように、コンストラクターに物事を入れる正当な理由は、最終フィールドの使用です。
ただし、コンストラクターで初期化すると、オブジェクトの寿命が少し長くなりますが、onCreate
はその後すぐに呼び出されるため、あまり考えていません。
それは私の理想に反しますが、アクティビティメンバの初期化のコンストラクタを避け、アプリが処理するリソースのonResume()
とonPause()
に依存しています。
onCreate()
の場合、通常はローカル変数へのビューマッピングを行うために使用します。 Androidアノテーションは既にそれを行っているので、アクティビティにonCreate()
メソッドを使用することはめったにありません。私はまだサービスでそれを使用しています。
ただし、メンバーを見ると、初期化されている可能性があります
適切なときに呼び出す必要がある「close」メソッドがあります(onResumeまたはonPause)
これらはビューの一部になります。つまり、初期化する必要があり、onCreateを呼び出す必要があります。
とにかくコンストラクターに入れる必要のない定数であり、静的なファイナルだけで十分です。これには、静的ブロックによって初期化できるペイント定数とパス定数が含まれます
私は今、コンストラクタをオーバーライドする必要があるケースにいます。実際、同じ構造のアクティビティがいくつかあります。したがって、多くのアクティビティを作成する代わりに、1つの「マスター」アクティビティを作成し、他のアクティビティはこのアクティビティを継承します。したがって、oncreateメソッドで使用されるいくつかの変数を初期化できるように、子アクティビティのコンストラクターをオーバーライドする必要があります。
言い換えれば、コンストラクターは、継承によって再利用できる「マスターアクティビティ」をシミュレートさせます!
アクティビティにカスタムパラメータがある場合、または継承元のクラスからの呼び出しを追跡する場合は、コンストラクタをオーバーライドする必要があります。