2011-10-25 28 views
3

概要バックスタック内のアクティビティが終了すると、戻るボタンは以前のアクティビティに戻りますか?

は、ここに私のシナリオです:

  • 私のアプリは、外部アプリケーション(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がどのように動作しているかを知ることができます。

答えて

0

アクティビティを終了()すると、そのアクティビティがスタックから削除されます。

もう一度作成しない限り、元に戻すことはできません。

+0

完成したアクティビティに戻って欲しいのではありませんが、[戻る]ボタンがまだ実行中の他のアクティビティに戻ることを期待していました。その仮定は間違っていますか? –