相変わらず、マニュアルとか読まないので今回はじめて知ったこと。
Androidにおけるアプリの多重起動禁止方法
多分ソース的にも回避する方法があるような気がするんですが。
少なくとも簡単に調べた結果、Winアプリみたいにmutex的な排他方法とかは見つかりませんでした。
で、肝心の多重起動禁止方法
- Activity のLaunchモード(launchMode 属性)を変更する
起動モードは
- standard(default)
- singleTop
- singleTask
- singleInstance
簡単な方法で一応確認
適当なアクティビティを一つ作って
onCreate ~ onDestroy を実装し、Logだけ吐くように設定
でもって以下のように動作させる。
起動→ホームボタン→再度アプリをメニューから起動(ホーム長押しではない)
ログ見ればすぐに分かりますが、
- standard の場合、onStop のログのあとに onCreate が
- それ以外の場合、onStop のログのあとに onRestart が
後者は「戻るボタン」を押せば、デスクトップが表示されます。
singleTop が多重起動しなかったわけは、上記サイトを確認。
というか、ホームボタン長押し→表示されるアプリ一覧から起動でonPause からの復帰というの、今回初めて知ったし・・・。
多分条件次第ではホームボタン長押しからでも多重起動するんじゃないかな?と思います(複数のActivityを抱えるアプリだとありそう)
いやしかし、みんな開発ガイドとか読んでるんかな?
対象の部分が日本語じゃなかったら絶対読んでない・・・。
ついでに言うとなんとなくしか理解していませんがw
2010/01/17 追記
ぐぐってたらこちらのブログの記事でIntentのCategoryとExtraとFlagの一覧表を作られていました。
Intentで呼び出す場合にフラグを考慮すれば、もちろん条件次第でしょうが多重起動は回避できそうです。
勉強になりました。
0 件のコメント:
コメントを投稿