2010年1月17日日曜日

Android アプリの多重起動禁止

相変わらず、マニュアルとか読まないので今回はじめて知ったこと。

Androidにおけるアプリの多重起動禁止方法
多分ソース的にも回避する方法があるような気がするんですが。

少なくとも簡単に調べた結果、Winアプリみたいにmutex的な排他方法とかは見つかりませんでした。

で、肝心の多重起動禁止方法

  • Activity のLaunchモード(launchMode 属性)を変更する
http://developer.android.com/intl/ja/guide/topics/fundamentals.html

起動モードは

  • 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 件のコメント:

コメントを投稿