2011-06-29 5 views
4

インテントフィルタを指定して特定の種類のファイルを処理するシングルタスクモードのアクティビティを使用しています。 このようなファイルIntentをそれぞれ1回だけ処理する必要があります。 onNewIntent()は、タスクがすでに生きている場合にのみ呼び出され、onCreate()からインテントを処理するように強制されます。残念ながら、onCreate()はさまざまな理由で呼び出され(たとえば画面の回転)、getIntent()によって返されるインテントは複数のonCreate()で同じものになることがあります。 もちろん、いくつかの醜いハックを使ってこれを回避することは可能ですが、私は洗練された解決方法が何であるか疑問に思っていました。 私が思いついた最善の解決策は、インテントを処理したたびにsetIntent(新しいインテント(Intent.ACTION_MAIN))することです。これは、リフレッシュの結果として操作をやり直すのを避けるために、WebページがPOSTページの後にGETページにリダイレクトする方法と同様のパターンです。singleTaskを使用しているときに各インテントを一度に渡す方法

ありがとうございます!

答えて

-1

処理後はsetIntent(null)はどうですか?

+0

はまったく同じ効果を達成するようです。これは正しい方法ですか? – Ytai

+0

このメソッドを使用しないでください。時々動作しないことがあります。 Googleがより適切なソリューションを提供するために、私は100%何がいつも動いているのか、まだatmをテストしているのか分かりません。 – n3XusSLO

0

私はあなたの問題が発生した場合でも、インテントを呼び出して新しいアクティビティを開始すると、call finish();の直後に を呼び出します。あなたが離れる活動を終了する。これにより、最後のアクティビティが終了し、同時に複数のアクティビティが実行されなくなります。

アクティビティを起動する方法として画面ローテーションを使用している場合は、「If and Else」ステートメントを使用していくつかのチェックを設定することで、複数回起動したくないものをいつでも制御できます。

0

単一タスクを削除すると問題が解決します。
コールsingleTaskの活動を削除する、と置き換えることができます。

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
       | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
関連する問題