Help us understand the problem. What is going on with this article?

Androidでパッケージマネージャーから起動した場合二重起動してしまった

Androidで

  • A.ホームからアプリアイコンから起動した場合
  • B.アプリをブラウザでダウンロードしインストール後のパッケージマネージャーアプリから起動した場合

の2つの起動方法で動作が異なり、ネットを彷徨い続けたのでメモ。

具体的にはスプラッシュ画面を実装しているのだが、

  • Aで起動 → スプラッシュが終了 → ホームボタン → Aで起動 → 前回終了画面
  • Bで起動 → スプラッシュが終了 → ホームボタン → Aで起動 → スプラッシュ画面が起動

なぜか、インストールを行ったパッケージマネージャーでそのまま、開くを押して起動した場合に前回終了画面から再開してくれない。

一応 android:launchMode="singleTask" にすれば、動作の違いは解消しますが、
前回終了画面から再開してほしい・・・

この現象調べまくっていると、
https://groups.google.com/forum/#!topic/android-group-japan/xTkgh24lnRc
全く同じ現象をやりとりしていて、これだ!と思ったのですが、
android:launchMode="singleTask"
にするとの回答しかありませんでした。

Launcher Activity に android:launchMode="singleTask"を設定すると、
既に起動されているTaskが使用されますが、最後に表示していたActivity
が表示される保障があるわけではなく、Launcher Activityが最前面になり
ますよね?

中にこのような質問があり、そう!そうなんですよ!と思いましたが、それの回答は見当たらず・・・

最終的に以下サイトに行き着きました。
http://d.hatena.ne.jp/kk_Ataka/20130804/1375624170

ブラウザからinstallして起動したときと、ランチャーから起動した時では、
起動するときのIntentが微妙に異なります。
その為、ランチャーから起動した場合の、「既に起動していたら二重起動しない」という
仕組みが動作しません。
二重起動されたActivityでは、起動IntentにFLAG_ACTIVITY_BROUGHT_TO_FRONTがセットされるようなので、

SplashActivity.java
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
    finish();
    return;
  }
}

のようにすると、所望の動作になると思います。

上記の修正をそのまま対応して解決。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away