devlogAndroidとかiOSとかモバイル多め。その他技術的なことも書いていきます。2017-10-10【Android】Activityを2重で開かないようにするAndroidなにも考えずに実装を行うとActivityが2重で開いてしまうことがある。ボタンを押して次のActivityが開くとき、そのActivityやIntentに設定をしていなければ、素早く連打することで2重に開くことができる。AndroidのシステムのActivityを開くIntentにFLAG_ACTIVITY_CLEAR_TOPをつけるlaunchModeは指定しないとstandardに設定される。singleTopはほとんどstandardと同じだが、タスクのスタックの一番上に既存のActivityのインスタンスが既に存在する場合挙動が異なる。アクティビティが新たなインテントを受け取るたびに、クラスの新しいインスタンスが作成され、そのインテントに応答します。つのインテントを処理します。アクティビティの新しいインスタンスは、新しいインテントを処理するために作成されることもあります。新しいインスタンスは作成されません。タスク内ではない場合、新しいインスタンスが作成され、スタック上にプッシュされます。連打で1回Activityを開き2回目が開かれたとしても、そのActivityを使いまわし、onNewIntent()が呼ばれるという流れになる。これでActivityが2重で開くのを防ぐことができる。startActivityForResult()の場合はこれが効かず毎回新しいActivityが生成される。未調査だが恐らく結果を次のActivityが受け取るという特性上、Activityごとに結果が違うだろうということで新しいインスタンスが作られるのではないかと思う。これはstartActivityForResult()に渡すIntentにFLAG_ACTIVITY_CLEAR_TOPを指定してあげれば解決できる。Dを終了してA→Bとする。今回のケースの場合、A→B→C→DでEをstartActivityForResult()で呼び、A→B→C→D→Eとなった直後にEを呼ぶので、新しいインスタンスを作らずにA→B→C→D→Eのままになる。最後にアンインストールダイアログなどAndroidのシステムのActivityを呼ぶときも同様にFLAG_ACTIVITY_CLEAR_TOPを付ければ同様に解決できる。これらはsingleTopをアプリ側から指定することができない。21:22【Android】Activityを2重で開かないようにするTweet広告を非表示にする関連記事2018-11-22FragmentでViewPagerを使うときにFragmentPagerAdapterに渡すFra...嵌ったのでメモ。»プロフィールid:phicdyエンジニアとしてどこかで働いている。Androidがメイン。最近はPythonでちょっとしたスクリプトを書いたり。月別アーカイブ広告はてなブログをはじめよう!phicdyさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。