8

SurfaceViewがあり、カメラのプレビュー画像を表示するHomeActivityというアクティビティがあります。このアクティビティは静かで重く、開始/再開すると遅く感じます。

そこで、調査を行ったところ、どういうわけか常にonCreateメソッドが呼び出されていることがわかりました。私の意見では、アクティビティがすでに開始されている場合、これは発生しないはずですか?

ドキュメントには次のように書かれています:アクティビティが最初に作成されたときに呼び出されます。ここで、通常の静的設定をすべて行う必要があります。ビューの作成、データのリストへのバインドなどです。このメソッドは、アクティビティの以前にフリーズされた状態(存在する場合)を含むバンドルも提供します。常にonStart()が続きます。

戻るを処理するメソッドは次のとおりです。

protected void gotoHome() {
    final Intent intent = new Intent(SomeOtherActivity.this, HomeActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
}

編集:

これが私がHomeActivityを離れる方法です...特別なことは何もありません:

final Intent i = new Intent(HomeActivity.this, SomeOtherActivity.class);
startActivity(i);
4

1 に答える 1

15

はい、HomeActivityに戻りたい場合は、次のフラグを使用する必要があります。

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);

Intent.FLAG_ACTIVITY_CLEAR_TOPのドキュメントの関連セクションは次のとおりです。

上記の例で現在実行中のアクティビティBのインスタンスは、ここで開始している新しいインテントをonNewIntent()メソッドで受け取るか、それ自体が終了して新しいインテントで再起動します。起動モードが「複数」(デフォルト)であると宣言されていて、同じインテントでFLAG_ACTIVITY_SINGLE_TOPを設定していない場合は、終了して再作成されます。他のすべての起動モードの場合、またはFLAG_ACTIVITY_SINGLE_TOPが設定されている場合、このインテントは現在のインスタンスのonNewIntent()に配信されます。

于 2012-07-05T15:28:31.787 に答える