4

私はアプリケーションを持っており、新しく作成されたすべてのアクティビティは、ユーザーセッションを検証するための非同期タスクを開始します。セッションが有効な場合、アプリケーションフローは続行されます。そうでない場合は、アクティビティスタック全体をクリアする必要があり、ログインアクティビティのみが存在する必要があります。このアクティビティには「履歴なし」フラグがあるため、スタックに保持されることはありません。

私はここで提供されるいくつかの解決策を試してきました:Android:アクティビティスタックをクリアしましたが、成功しませんでした。

これは、可能な限り最低のAndroidで動作する必要があります。

ありがとう!

4

3 に答える 3

3

ログインアクティビティをスタックに保持します。ログインアクティビティのonResume()で、ユーザーがログインクレデンシャルを持っているかどうかを確認し、持っている場合は、ログイン後に表示される次の画面でstartActivityを呼び出します。この場合、ユーザーにはログイン画面は表示されません。

ユーザーがログアウトボタンを押すと、ユーザーの資格情報がクリアされ、スタックがクリアされてログイン画面に戻ります。

    Intent intentLaunchLogin = new Intent(this, ActivityLogin.class);
    intentLaunchLogin.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intentLaunchLogin);

また、ユーザーがログイン後に表示される画面にいて、「戻る」ボタンを押した場合、ログインアクティビティに移動しないようにします。このコードは、予想どおりにユーザーをホーム画面に送信します。

moveTaskToBack(true);
于 2012-04-06T20:00:44.087 に答える
0

ここで説明されているようなことをしていただけませんか。

http://blog.janjonas.net/2010-12-20/android-development-restart-application-programmatically

基本的に、インテントを開始するアラームを作成してから、アプリを完全に閉じます。

于 2012-04-06T19:27:03.983 に答える
0

これは私がいつもしていることであり、完璧に機能します。メインアクティビティでアプリを起動し、ユーザーがログインしているかどうかを確認します。ユーザーがログインしていない場合は、次のようなログインアクティビティを起動します。

void launchLoginActivity(){
 /* Move user to LoginActivity, and remove the backstack */
    Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(intent);
    finish();
}

それはあなたが戻ることを許可しません

于 2015-12-26T05:41:08.383 に答える