2012-07-05 6 views
7

HomeActivityというアクティビティがあり、SurfaceViewがあり、カメラのプレビュー画像が表示されます。このアクティビティは静かで重く、起動/再起動すると低速です。onCreateは、インテントでナビゲートする場合には常に呼び出されます。

私はいくつかの調査を行い、何とかいつもonCreateメソッドが呼び出されていることを知りました。アクティビティが既に開始されている場合、これは起こらないはずです。

documentationは: アクティビティが初めて作成されたときに呼び出されます。ビューの作成、リストへのデータのバインドなど、通常の静的な設定をすべて行う必要があります。この方法では、アクティビティの以前のフリーズ状態(存在した場合)が含まれるBundleも提供されます。 常に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); 
+0

他のアクティビティを開始するときにHomeActivityを終了しないように注意してください。 – Egor

+0

onCreat()メソッドは、 'gotoHome()'メソッドを使用しているときに呼び出されますか? –

+0

@Error finish()を呼び出さない – Mark

答えて

14

はい、ときここ

は戻って処理するメソッドは、ありますHomeActivityに戻したい場合は、次のフラグを使用する必要があります。

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
上記の例では、アクティビティBの現在実行中のインスタンスは、どちらか あなたがその onNewIntent()メソッドでは、ここで始めている新しい意思を受け取ることになります

はここIntent.FLAG_ACTIVITY_CLEAR_TOP上の文書から関連セクションです新しい インテントで終了し、再起動してください。起動モードが「マルチプル」( のデフォルト)と宣言されていて、同じ インテントにFLAG_ACTIVITY_SINGLE_TOPを設定していない場合は、完了して再作成されます。他のすべての起動の場合は モード、またはFLAG_ACTIVITY_SINGLE_TOPが設定されている場合、このインテントは現在のインスタンスのonNewIntent()に配信される になります。

+0

ありがとうございました! Facepalm ...自己がこのアイデアを持つことができます! – Mark

+0

時には、ここで便利な答えをどれくらい早く得ることができて驚いています;-)喜んで助けになります。 –

+0

こんにちはデイヴィッド、私のactivitiyのoncreateは、私が子供の活動から戻ってくるたびに呼び出される、あなたは私を助けることができる? –