93

AndroidActivitiesには特定のライフサイクルがあり、それonCreateをオーバーライドして初期化に使用する必要があることを理解していますが、コンストラクターでは正確に何が起こりますか?Activityコンストラクターもオーバーライドできる/すべきである場合、または決してそれに触れてはならない場合はありますか?

Activitiesへの参照が完全にクリーンアップされていないため(したがって、ガベージコレクターが妨げられているため)、コンストラクターは使用しないでくださいonDestroy。これは、その目的のためにあります。これは正しいです?

4

4 に答える 4

36

コンストラクターで何かをする正当な理由は考えられません。アクティビティを直接作成することはないため、それを使用してパラメータを渡すことはできません。通常は、onCreateで実行します。

于 2010-07-21T20:26:02.320 に答える
7

Giliのコメントが述べているように、コンストラクターに物事を入れる正当な理由は、finalフィールドの使用です。

ただし、コンストラクターで初期化すると、オブジェクトの寿命が少し長くなりますが、onCreateすぐに呼び出されるため、あまり考えていません。

私の理想に反していますが、アクティビティメンバーの初期化のためのコンストラクターを避け、アプリが処理しているリソースに依存しonResume()ています。onPause()

onCreate()私は通常、ローカル変数へのビューマッピングを行うためにそれを使用します。android-annotationsはすでにそれを行っているのでonCreate()、アクティビティのメソッドを持っていることはめったにありません。私はまだサービスでそれを使用しています。

ただし、メンバーを見ると、初期化されている可能性があります

  • それらには、適切なタイミング(onResumeまたはonPause)に呼び出す必要のある「close」メソッドがあります。

  • それらはビューの一部になります。つまり、初期化してからonCreateを呼び出す必要があります。

  • これらは定数であり、とにかくコンストラクターに入れる必要はありません。静的なfinalで十分です。これには、静的ブロックによって初期化できるペイント定数とパス定数が含まれます

于 2013-07-19T21:46:55.717 に答える
6

私は今、コンストラクターをオーバーライドする必要があるケースにいます。実際、私には同じ構造の活動がいくつかあります。したがって、多くのアクティビティを作成する代わりに、1つの「マスター」アクティビティを作成し、他のアクティビティはこれを継承します。したがって、oncreateメソッドで使用されるいくつかの変数を初期化できるように、子アクティビティのコンストラクターをオーバーライドする必要があります。

つまり、コンストラクターを使用すると、継承によって再利用できる「マスターアクティビティ」をシミュレートできます。

于 2012-01-13T23:46:03.597 に答える
0

アクティビティにカスタムパラメータがある場合、またはから継承したクラスからの呼び出しを追跡する場合は、コンストラクタをオーバーライドする必要があります。

于 2010-07-21T18:39:20.680 に答える