0

活動のライフサイクルは多くの場所で文書化されていますが、必要なものが見つかりませんでした。これは私のアクティビティです。コンストラクターとonCreateメソッドがあります。私のプロジェクトでは、このメソッドにもログインしており、縦向きから横向きに移動するたびに、両方のメソッドが実行されていることがわかります。なぜ私のコンストラクターが呼ばれるのですか?はスタック内のアクティビティではなく、アクティビティのインスタンスはメモリ内にあるため、構成の変更が発生した場合は、oncreateとonretainistancestateのみが発生する必要があります(もちろんonResume)。コンストラクターが毎回呼び出されるのはなぜですか?構成から何かが変更されるたびに、両方のメソッドが呼び出されることが保証されます(この同じシーケンスで次々に)。

public TestActivity()
{
    super(R.menu.main_menu, tag);
}
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

サンプルアプリで遊んでいましたが、詳細を知りたいのですが、コンストラクターが含まれている場合のシナリオを誰かに教えてもらえますか?ライフサイクルに関するドキュメントをたくさん作成しましたが、コンストラクターが含まれている場合の詳細は説明されていません。

編集1:ウィッチにスタックがあることをいくつかの場所で読んだので、次にアクティビティが起動してより速く実行されるときにアクティビティが入れられますが、構成が変更された場合はどうなりますか?コンストラクターとoncreateメソッドを呼び出す必要がありますか?

4

3 に答える 3

0

ローテーションすると、アクティビティが再開されます。android:configChanges="keyboardHidden| orientation"マニフェストでそれを防ぐことができます。

于 2011-10-20T09:07:32.830 に答える
0

@rekireが応答すると、画面の回転時にアクティビティが再開されます。ここで再起動とは、フレームワークがアクティビティの別のインスタンスを作成することを意味します。そのため、アクティビティクラスのコンストラクターが呼び出され、次にonCreate()が呼び出されます。新しいアクティビティインスタンスは、その参照が他の人によって保持されていない場合、GCによって最終的にリサイクルされる古いインスタンスを置き換えます。

画面の回転時にアクティビティが再開されないようにする場合は、この質問をお読みください。

Androidアクティビティのライフサイクルを説明するUML図を作成しました。

于 2011-11-30T15:54:56.153 に答える
-2

したがって、paramsを使用したコンストラクターがない限り、コンストラクターを使用してアクティビティを呼び出す理由はありません(onCreateはとにかくそれを呼び出します...)。ただし、基本的には、JavaがonCreateで、おそらくアクティビティのデフォルトコンストラクタを呼び出しているように見えます。

public ActivityName(){} // This might get call because onCreate somewhere under the hood invoking Activity :)

次のようなパラメータを持つコンストラクタで同じことを試してください

public ActivityName(String s){}// This wouldn't be call unless you explicitly call it.

これがお役に立てば幸いです、

私はもっ​​と専門家の答えを待つでしょう:)


編集:それで、onCreateを呼び出す電話を回転させると、再び作成され、onCreateはおそらくデフォルトのコンストラクターを呼び出してアクティビティのインスタンスを呼び出します:)...これについては前に説明しました。

于 2011-10-20T09:06:48.913 に答える