2016-04-25 3 views
3

私はの単一インスタンスのすべてをActivityの1つのアプリケーションとして開始します。 launchMode singleTaskはオプションでしたが、1つだけActivityのために働いています。アプリケーション全体で各アクティビティのインスタンスを1つだけ保持します

私はそこにはインスタンスがありませんし、それが呼び出された場合Activityを開始する

  • をしたいです。
  • そのほかのインスタンスがすでに存在する場合は そのインスタンスは新しいインスタンス の作成なしで前面に表示されます。Activityです。
  • このプロパティは複数のActivityに適用されます。
  • いいえActivityは常に履歴スタックの最上部にあることを保証します。
  • 今まで

私の仕事:

私は、私の場合のために有効ではない多くの示唆を得たので、私は他の人が同じ示唆を与えないだろうように、これらを指摘したいと思います。

  • 私はsingleToplaunchModeを設定しているし、これはActivityは、履歴スタックの一番上にある場合にのみ機能します。 onNewIntent()は、Activityがヒストリスタックの先頭にある場合にのみ呼び出されます。私の場合、Activityはスタックのどの位置にあってもかまいません。これは機能しません。
+0

すべてのアクティビティでsingleTopを使用してください。 – Nfear

答えて

5

あなたがActivityを起動するとこのようにそれを行う、このActivityのインスタンスがすでに存在する場合

Intent intent = new Intent(this, MyActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
startActivity(intent); 

、それは前に移動されます。インスタンスが存在しない場合は、新しいインスタンスが作成されます。

+1

私の問題を解決しました。ありがとう。 –

+1

@David Wasser:私にとっては同じ問題です。私の問題、歓声のために働いた! – AJW

0

利用代わりsingleTop起動モード(docs):すでに、呼び出し側のタスクでスタックの一番上にある同じタイプのアクティビティのインスタンスがある場合は、テントがされる代わりに、作成された新しい活動がないでしょうonNewIntent()メソッドを通じて既存のActivityインスタンスに送信されます。

起動モードの詳細についてはthis articleを参照してください。

+0

は試してみます。あなたに知らせてください。 –

+0

だから私は、アクティビティがあなたの与えられた条件で働いているヒストリスタックの一番上になければならないと仮定します。私の場合はそうではありません。もし私が間違っているなら、私を修正してください.Marcin。 –

+0

よろしくお願いいたします。実際に@ david-wasserの答えは 'FLAG_ACTIVITY_REORDER_TO_FRONT'を使ってうまくいきます。私は自分の –

2

あなたはアンドロイドを設定することができます。アクティビティがすでに存在する場合は、あなたの活動のlaunchModesingleTop にこの場合は、新しいインテントが活動のonNewIntent()に配信されます前にそれをもたらす http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

これは、あなたのアクティビティがスタックの一番上にある場合に機能します。

あなたが活動の単一のインスタンスを持つようにしたい場合は、singleTaskにごlaunchModeを設定することができますが、それはあなたの活動が混乱することができ、別のタスクに常駐するようになりますように、この方法はお勧めできませんユーザーに通知します。

+0

私は、あなたの与えられた条件で動作するために、アクティビティがヒストリスタックの一番上になければならないと仮定します。私の場合はそうではありません。私が間違っているなら、私を修正してください@ミーナ。 –

+0

はい、そうです、それはスタックの一番上にある必要があります –

+0

しかし、私の場合は異なっています。編集した質問をご覧ください。 –

関連する問題