2012-01-17 21 views
6

なぜこれを理解するのが難しいのかわかりません。私は私の主な活動を開始し、初めて開かれたかどうかを確認します。そうであれば、メインアクティビティを終了し、FLAG_ACTIVITY_NEW_TASKで設定/紹介アクティビティを開きます。設定プロセスは、3つのアクティビティ(A、B、C)で構成されています。アクティビティCの終わりに、どのようにクリアするか、A、B、およびCを含むセットアップタスクを取得し、メインアクティビティを再度開始します。私はメインアクティビティIntentFLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOPを追加しようとしましたが、BACKを押すと、セットアッププロセスのアクティビティCに戻ります。 Cが終了してメインを起動したときに、アクティビティA、B、Cのタスクをクリアするにはどうすればよいですか?ありがとう!タスクをクリアして新しいアクティビティを開始してください

Android 1.6(API 4)でビルドしているため、Activityフラグの一部が制限されている可能性があります。

+0

メインアクティビティに進むときにアクティビティCを終了します。 – Mudassir

+0

フラグをクリアすると、1つのアクティビティだけがスタックから削除されます。 – L7ColWinters

+0

@MudassirアクティビティCを終了したら、メインアクティビティからBACKを押すと、アクティビティBに移動します。 – Brian

答えて

0

Mudassirはすぐに新しいものを開始した後に自分のコメントだけfinish()あなたの活動に言うように、私は同様の質問here

に答え。

+0

いいえ、私は、セットアッププロセス中に必要な場合、ユーザーがステップに戻ることができるようにしたいと考えています。私がしたいのは、最後のステップが完了したらセットアップ活動のスタックを完了することだけです。 – Brian

2

FLAG_ACTIVITY_CLEAR_TOPは、同じアクティビティインスタンスのアクティビティをクリアします。ここでは、あなたのすべてのアクティビティが異なるインスタンスになっているので、FLAG_ACTIVITY_CLEAR_TOPは機能しません。タスクをクリアするには、各アクティビティーでアクティビティー・インスタンスを作成し、そのアクティビティーのonCreateメソッドにそのインスタンス 'this'を割り当てます。タスクjusをクリアしたいときはいつでも、そのinstance.finish()を呼び出します。必要なアクティビティを開始します。

+1

これで、すべての3つのアクティビティを一度に終了できますか? – Mudassir

+0

それは一度もありません、アクティビティA、B、Cを参照してください。一度にこれらをすべて終了するには、単にactivityA_instace.finish();のような何かをする必要があります。 activityB_instace.finish(); activityC_instace.finish();また、インスタンスが宣言したアクティビティから静的であることを確認してください。それがそうであれば、あなたは実際に私が上に示したようにどこからでもあなたの仕事をクリアすることができます – amandroid

+0

インスタンスによって正確にはどういう意味ですか?いくつかのコードを使って説明していただけますか? – Mudassir

0
class A extends Activity { 
public static Activity instanceOfA = null; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    instanceOfA = this; 
} 
} 

class b extends Activity { 
public static Activity instanceOfB = null; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    instanceOfB = this; 
} 
} 


class c extends Activity { 
public static Activity instanceOfC = null; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    instanceOfC = this; 
} 
} 

は今、あなたは、その後、あなたの現在の活動からすべてのタスクをクリア)( instanceOfA.finishを呼び出したいとし、 instanceOfB.finish(); instanceOfC.finish();

+9

これは受け入れられません。あなたは、それらに関連付けられたすべてのアクティビティとすべてのリソース(hiarerchies、* images *を表示)を漏らしています。 –

+0

この[回答](http://stackoverflow.com/a/3008684/269876)に似た何かがあなたに適しています。 @JonasAlvesが指摘するように、あなたは静的を使ってそれらの活動をすべて漏らしています。代わりに、セットアップが完了したときにブロードキャストできるメッセージを用意し、各設定アクティビティでブロードキャストを受信するようにしてください。セットアップの完了通知を受信すると、完了することができ、これを達成するために必要な統計情報はありません。 –

+2

アクティビティへの静的参照は、ビューがメモリ内に残り、リサイクルされず、メモリリークが発生することを意味します。 – George

1

実はこれは、私はあなたがこの方法で何かをリークしていない、これは正しい方法だと思いますstartActivityForResult

public class A extends Activity { 
    public onButtonClick() { 
     startActivityForResult(new Intent(this, B.class), 0); 
    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == RESULT_OK) { 
     finish(); 
     } 
    } 
} 

public class B extends Activity { 
    public onButtonClick() { 
     startActivityForResult(new Intent(this, C.class), 0); 
    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == RESULT_OK) { 
     setResult(RESULT_OK); 
     finish(); 
     } 
    } 
} 

public class C extends Activity { 
    public onButtonClick() { 
     setResult(RESULT_OK); 
     finish(); 
    } 
} 

で達成することができます。

PS:これは古い投稿であることは分かっていますが、おそらく誰かがこの点を知っています。

関連する問題