アプリ二重起動について

すでにアプリを起動している状態で、ウェブや、ステータスバーから同アプリを起動した場合
以前のActivityが残った状態となってしまっていた。


アプリを起動した時点でログイン処理等をしているので、今までのActivityは消したい。
ManifestのlaunchModeを全て"singleTask"にしてしまってもよかったが
それだと重大な欠点が。
Activityからの戻り値を処理する、onActivityResultが正常に動作しない。
"singleTask"なのであたりまえか・・


なので、launchModeは"standard"(デフォルト モード)のままで、
一番最初のIntentオブジェクトに以下のフラグを設定。

Intent intent = new Intent(this, Login.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

FLAG_ACTIVITY_CLEAR_TOP:呼び出すActivity以外のActivityをクリアして起動させる
FLAG_ACTIVITY_NEW_TASK :スタックに残っていても、新しくタスクを起動させる


■参考
Android Activity, Task, Stack, Launch mode
http://y-anz-m.blogspot.com/2010/08/android_10.html
●IntentのCategoryとExtraとFlagの一覧表を作ってみたよ
http://d.hatena.ne.jp/hyoromo/20091003/1254590170