0

ユーザーがそれを使用するためにログインする必要がある Web アプリ関連の Android アプリがあるとします。ユーザーはログイン画面アクティビティでログインし、他のアクティビティに進みます。ユーザーがアクティビティを開始するたびに、アプリはログイン資格情報を再度確認します (資格情報は中央データベースのどこかに保存されます)。

ユーザーがあるアクティビティから別のアクティビティにジャンプするときに、ユーザーのログイン資格情報がサービスから取り消されたとします。次にユーザーがアクティビティにアクセスすると、アプリは、ユーザーがアクセスできなくなったことを認識します。これで、アプリはユーザーをログイン画面のアクティビティに戻します。

しかし、ユーザーがアプリを使用したときにアプリが作成したアクティビティのスタックが既に存在するため、ログイン画面を取得するにはどうすればよいでしょうか。ログイン画面のアクティビティ (アプリのスタックの一番下にあるアクティビティである必要があります) に到達するまで、すべてのアクティビティを強制終了/破棄しますか?

それとも、新しいログイン画面アクティビティを開始して、そこに直接進みますか?

FLAG_ACTIVITY_CLEAR_TOPまたは、インテントを介して渡されたログイン画面アクティビティを呼び出す必要がありますか?

ユーザーが 2 回目にログインできるようになった後 (資格情報が復元されたとしましょう)、アクティビティがスタック内の唯一のアクティビティである場合、戻るボタンを押すと、アプリに戻るのではなく、アプリから移動します。資格情報が取り消される前に彼が何をしていたか。これに対する最善のアプローチは何ですか?

4

2 に答える 2

2

私の個人的な選択は、すべてのアクティビティ (もちろん、ログイン アクティビティ以外) をセットアップして、ユーザーの資格情報をチェックインするonResume()ことです (これは継承によって行い、すべてのアクティビティは abstract から継承しAuthorizedActivityますが、うまくいくことを行います) . ユーザーが認証情報を持っていない場合 (認証情報を持っていないか、取り消されているため) startActivityForResult()、ログイン アクティビティを実行します。LoginActivity が有効なユーザーを返す場合は、すべて問題ありません。ユーザーが有効であるが、以前にログインしたユーザーとは異なる場合、FLAG_ACTIVITY_CLEAR_TOP. loginActivity から [戻る] ボタンを押しても、アプリはそれらをホームに直接バウンスするため、役に立ちません。

このアプローチにより、資格情報がアプリケーションを (短時間) 離れたとしても、資格情報をいつ、どのように確認/取り消すかを柔軟に決定できることがわかりました。

于 2012-04-03T21:54:03.533 に答える
0

ログイン画面のアクティビティFLAG_ACTIVITY_CLEAR_TOPは機能しますが、ユーザーの履歴はすべて削除されます。彼らが資格情報を更新してから、押し返しても気にしますか? それは彼らの歴史を保存する必要がありますか?

ログイン アクティビティについては、FLAG_ACTIVITY_SINGLE_TOPとを考慮することができます。FLAG_ACTIVITY_NO_HISTORY

以前のすべてのタスクをログイン画面にリダイレクトする場合は、onResumeアクセス許可が取り消された後にスタックを通過できないように、必ずチェックインを行う必要があります。

これらのフラグは、マニフェスト<activity>の要素にも設定できることに注意してください。

于 2012-04-03T21:39:56.293 に答える