2012-04-06 21 views
3

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

私はここに提供されたいくつかのソリューションを試してきました:Android: Clear Activity Stackしかし成功なし。

これ必須では少なくとも2.2

おかげであること、最低のアンドロイド可能に取り組んでいます!

答えて

3

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

ユーザーがログアウトボタンを押すと、私は、ユーザーの資格情報をクリアしてから、これはバックログイン画面にすべての方法のスタックをクリアします。また、

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

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

moveTaskToBack(true); 
+0

私はそれを試してみましょう;)ちょうど疑い、moveTaskToBack関数は、ログイン用のものかログイン用のものか? –

+0

しかし、ログイン後の活動には若干の変更がありました。私は、moveボタンのBackボタンアクションをハイジャックしてアクティビティを終了しました。私はそれがアプリケーションが再開するたびにログインアクティビティから開始するようにしたい –

+1

私は、ユーザーが再びログイン画面を見ないようにするために、ログイン後のアクティビティのonBackPressedハンドラでmoveTaskToBackコールしか持っていません。ユーザーがログアウトしている場合にのみ、ログイン画面が表示されます。 – Andrew

0

は、あなたのような何かがここで説明されたんでした:

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

基本的にあなたは、あなたがあなたのアプリケーションが完全に閉じて、あなたの意図を開始したアラームを作成します。

+0

なし戻ってすることはできません主な活動でチェックをアプリを起動します。 ..私はアプリケーションを再起動したくない...私はそれが良いユーザーエクスペリエンスではないと思う... –

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(); 
} 

のような立ち上げにログインアクティビティをログに記録されていない場合、ユーザーは、ログインしている場合 は、私はそれはuが

関連する問題