というランチャーアクティビティがありHomeActivity
ます。
そして、LoginActivity
ユーザーが他の画面にアクセスするためにログインする必要がある場所から。
HomeActivity
としてマークされていsingleTask
ます。
HomeActivity のonCreate()
メソッドではLoginActivity
、ユーザーがログインしていない場合に起動します。
では、スタック内で表示される次のアクティビティが であると仮定して、をLoginActivity
呼び出すだけでfinish()
、 を閉じます。LoginActivity
HomeActivity
このセットアップは、1 つを除いて、ほとんどの場合に機能します。
- ユーザーがログインしていません。
- アプリを起動 -> 起動
HomeActivity
- ログインが検出されません -> 起動します
LoginActivity
- で、ホーム
LoginActivity
を押します。 - アプリを起動すると、
LoginActivity
. - ログインを行い、成功する
LoginActivity
と終了です。
の代わりにHomeActivity
、ホームスクリーンが表示されます。それは期待されていますか?私は何か間違ったことをしていますか?
開発者向けオプションの [アクティビティを保持しない]がオフになっていません。そのため、アクティビティ スタックが をどのように失うのか疑問に思ってHomeActivity
いHomeActivity
ましたLoginActivity
。
LoginActivity の Cancel または Login メソッド:
public void doLogin(View v) {
setResult(RESULT_OK);
finish();
}
public void cancel(View v) {
setResult(RESULT_CANCELED);
finish();
}
LoginActivity の呼び出し:
onCreate()
とから呼び出されonNewIntent()
ます。
なぜ onNewIntent() が必要なのですか? そのため、どこからでも を開始でき、セッションの有効期限が切れHomeActivity
たonNewIntent()
場合に呼び出されます。上にある他のすべてのアクティビティはHomeActivity
削除され、LoginActivity
表示されるはずです。
protected void onCreated(Bundle savedInstance){
if(!isLoggedIn()){
startLoginActivity();
}
}
protected void onNewIntent(Intent intent){
if(!isLoggedIn()){
startLoginActivity();
}
}
private void startLoginActivity(){
Intent intent = new Intent(this, LoginActivity.class);
startActivityForResult(intent, 100);
}
HomeActivity のアクティビティ結果について:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_CANCELED){
finish();
}
super.onActivityResult(requestCode, resultCode, data);
}
マニフェスト ファイル:
<activity android:launchMode="singleTask"
android:name="com.example.checkact.HomeActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.example.checkact.LoginActivity"></activity>
更新:を使用singleTop
すると正常に動作するようですが、なぜこのように動作するのかわかりませんsingleTask
。