概要バックスタック内のアクティビティが終了すると、戻るボタンは以前のアクティビティに戻りますか?
は、ここに私のシナリオです:
- 私のアプリは、外部アプリケーション(PDFビューア)を起動します。
- 私はそのアプリケーションを起動した私のアクティビティを終了しました(私のアプリからの他のアクティビティはまだアクティビティスタックにあります)。
- ユーザーが戻るを押すと、アプリに戻る代わりにそのアプリが終了します。
私のアプリの実行中のアクティビティが見つかるまで、Androidはアクティビティスタックを元に戻す必要がありますか、以前のアクティビティが見つからない場合は放棄しますか?
私のアクティビティを終了しないと、戻るボタンが自分のアクティビティに戻ります。そのため、基本機能が動作していることがわかります。
詳細
My活動スタックは次のとおりです。
MainActivity - > LoginActivity - > ActivityA - > ActivityB
この時点で、私はadb shell dumpsys activity
がスタックを確認信じる:
ヒストリック#11:HistoryRecord {40c0c018 com.mypackage/com.mypackage.ActivityB}
ヒストリック#10:HistoryRecord {40d27af0 com.mypackage/com.mypackage.ActivityA}
ヒストリック#9:HistoryRecord {40d31368 COM .mypackage/com.mypackage.LoginActivity}
ヒストリック#8:HistoryRecord {40db2430 com.mypackage/com.mypackage.MainActivity}
ヒストリック#7:HistoryRecord {40c2a978 com.mypackage/com.mypackage.LoginActivity}
ヒスト#6:履歴レコード{40bf6008 com.mypackage/com.mypackage.LoginActivity}
Hist#5:HistoryRecord {40542d58 com.htc.launcher/.Launcher}
ここで、アクティビティBは外部PDFビューアアプリケーションを起動します。
私のアプリには特定のセキュリティ要件があります。つまり、ユーザーがアプリの情報を再度見る前にPINを再入力する必要があります。
これを行うには、アプリケーションがバックグラウンドに移動するときに、ActivityAとActivityBにfinish()を通知するIntentをブロードキャストします。
ユーザーがPDFビューアで[戻る]を押すと、それらがLoginActivityに返されると思います。残念ながら、アプリはちょうど終了するようです。
PDFビューアが起動した後、adb shell dumpsys activity
スタックは示しています
ヒストリック#7:HistoryRecord {40b97a08 com.adobe.reader/.AdobeReader}
ヒストリック#6:HistoryRecord {40542d58 COM。 htc.launcher/.Launcher}
ヒストリック#5:HistoryRecord {40978318} com.google.android.gm/.ConversationListActivity
mLastPausedActivity:HistoryRecord {40b4aa90 com.mypackage/com.mypackage.ActivityB}
誰でもこのシナリオがどのように機能するか知っていますか?正直、私はAndroidがLoginActivityに達するまで、バックスタックを経由して戻ってくることを期待しています...
私はAndroidがフォアグラウンドにもはや存在しないアクティビティを破棄する権利を保持していると思いますちょうど未定義ですか?
このアプリは非常に複雑なので、既存のデザインを完全に破棄することはできません。多くのエントリーポイント(ウィジェット、通知、戻るボタン)、およびUIに依存してアプリケーションが中断されたことを伝えるその他の機能があります。
他の回避策(例えば、startActivityForResult
を使用し、ActivityBにIntent.FLAG_ACTIVITY_NO_HISTORY
を設定するなど)を検討していますが、Androidがどのように動作しているかを知ることができます。
完成したアクティビティに戻って欲しいのではありませんが、[戻る]ボタンがまだ実行中の他のアクティビティに戻ることを期待していました。その仮定は間違っていますか? –