質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

4031閲覧

Android4.4で、起動履歴からの起動するActivityはどうやって決まるのか?

usugita_san

総合スコア226

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2015/03/03 00:25

編集2015/03/03 01:11

Android4.4のSO-03F で、起動履歴からの起動時に、想定していないActivityで起動されてしまい、困っています。

前提として、このアプリは、以下のActivityを使用します。

  • アクティビティA 起動時のログインチェック用
  • アクティビティB ログイン画面
  • アクティビティC メイン画面

アプリをインストール後、起動すると、アクティビティAを最初に起動します。
自動的にログイン状態を確認し、アクティビティBかCに遷移します。
アクティビティCは、ログアウト機能を持ち、ログアウトするとアクティビティBのログイン画面へ遷移します。

また、このアプリは、通知アイコンの表示機能を持ちます。通知アイコンをタップすると、アクティビティAを起動し、ログイン状態を判断した後にアクティビティBかCに遷移します。

上記の前提で、以下の動作を行いました。

1.インストール後、起動します。アクティビティAを経由して、アクティビティBを表示します。
2.アクティビティBでログインし、アクティビティCへ遷移します。
3.アプリをバックグラウンドへ隠します。(この時はホームボタンを押しました)
4.通知アイコンをタップします。アクティビティAを経由して、アクティビティCを表示します。(ログイン後であるため)
5.ログアウトの処理を行います。アクティビティBのログイン画面へ遷移します。
6.アプリをバックグラウンドへ隠します。
7.起動履歴から、このアプリを選択します。
8.なぜかアクティビティCが起動します。

疑問なのは、手順8でアクティビティCが起動してしまう理由です。
AndroidManifestにも、最初にアクティビティAを起動するように、<action android:name="android.intent.action.MAIN" /> を設定しました。
にもかかわらず、起動履歴から選択すると、アクティビティCが起動してしまいます。

起動履歴は、どのように起動するアクティビティを選択しているのでしょうか?

なお、AndroidManifest.xmlでの定義ですが、以下の通りです。

アクティビティの定義ですが、以下の通りです。

lang

1<activity 2 android:name=".activity.ActivityA" 3 android:screenOrientation="portrait" 4 android:label="@string/app_name" 5 android:launchMode="singleTask" 6 android:noHistory="true" 7 > 8 <intent-filter> 9 <action android:name="android.intent.action.MAIN" /> 10 <category android:name="android.intent.category.LAUNCHER" /> 11 </intent-filter> 12</activity> 13<activity 14 android:name=".activity.ActivityB" 15 android:screenOrientation="portrait" 16 android:label="@string/app_name" 17 android:launchMode="singleTask" 18 android:noHistory="true" 19 > 20</activity> 21<activity 22 android:name=".activity.ActivityC" 23 android:screenOrientation="portrait" 24 android:label="@string/app_name" 25 android:launchMode="singleTask" 26 > 27</activity>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。
AndroidManifest.xmlで、アクティビティAとアクティビティBにandroid:noHistory="true" を付与している事が原因でした。

起動履歴からアプリを立ち上げる際に、そのタスク内で最後に起動したActivityを起動するはずです。
そのため、アクティビティBのログイン画面が起動するはずでした。
しかし、アクティビティBにはnoHistory属性が付与されており、タスク内には記録が残りません。
そのため、最後に起動したアクティビティCが無理やり起動されたのでした。

失礼しました。

投稿2015/03/03 02:13

usugita_san

総合スコア226

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問