2011-12-14 15 views
2

私はAndroidアプリケーションのC2DM通知を作成しています。ユーザーが通知をクリックしたときにアプリケーションを開きたいと思います。それは問題ありませんが、これはかなり簡単です。 問題は、(通知をクリックした後で)アプリケーションを起動しているときに、以前に開いたアクティビティが実際のアクティビティスタックに追加されているように見える場合、アプリケーションの複雑さに関する問題多くのアクティビティがあり、一部は静的フィールドがあります)。アクティビティをインテントで起動する前にアクティビティスタックをクリアする

問題を解決するために、2つの解決策はOKのようになります。

1)は、特定のアクティビティを呼び出すが、私は、ホーム画面上のアプリケーションアイコンをクリックしたときのように(開くために自分のアプリケーションに聞かないでください:オープンアプリケーションが終了した場合の最初のアクティビティ、またはアプリケーションが開かれた場合(バックグラウンドであった場合)にアプリケーションを前面に表示します。

2)すべてのアクティビティスタックをクリアし、特定のアクティビティを開始します。

しかし、私はどちらの解決策も実行することに成功しませんでした。インテントフラグ(http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOPなど)を使用しています。

誰かがこの問題の解決に手伝ってもらえますか?

おかげ

PS:私の下手な英語のため申し訳ありませんが、私はベルギーから来たんだ

答えて

1

それはあなたがするよう求めたものではないのですが、あなたは属性を追加することができてフォアグラウンドにされ、次回ですandroid:launchMode="singleTask"この通知が呼び出されるアクティビティに移動します。このインスタンスがすでに存在する場合、新しいアクティビティは作成されません。

ActivityManager.killBackgroundProcesses(String packageName)を使用してバックグラウンドプロセスを削除することもできますが、これを試みたことは一度もなく、アドバイスされていないか、ChriZzZの提案を使用して、アクティビティを少しきつく管理してください。

+0

アンドロイド:launchMode = "singleTask"は私の問題を解決するようです。どうもありがとうございました – ValentinTaleb

0

をセットした場合、あなたがFLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

を探しているように、これは点をマークしね:-)タスクがリセットされたときにクリアされるべきタスクのアクティビティスタック。これは、タスクがFLAG_ACTIVITY_RESET_TASK_IF_NEEDED(通常はユーザーの結果として、自宅からそれを再起動)

関連する問題