3

我有一个名为HomeActivity.

以及LoginActivity用户必须登录才能访问其他屏幕的位置。

HomeActivity被标记为singleTask

在 HomeActivity 的onCreate()方法中,LoginActivity如果用户未登录,我将启动。

在 中LoginActivity,我只是调用 afinish()来关闭LoginActivity,假设HomeActivity是要显示的堆栈中的下一个活动。

此设置适用于大多数情况,除了一种情况。

  1. 用户未登录。
  2. 启动应用程序 -> 启动HomeActivity
  3. 未检测到登录 -> 启动LoginActivity
  4. LoginActivity,按主页。
  5. 启动应用程序,我看到LoginActivity.
  6. 进行登录,成功LoginActivity后就完成了。

我没有看到 ,而是HomeActivity看到了 HomeScreen。这是预期的吗?我做错什么了吗?

我没有关闭开发者选项“保留活动”。所以,想知道活动堆栈是如何丢失的,因为我希望在完成.HomeActivityHomeActivityLoginActivity

LoginActivity 中的取消或登录方法:

public void doLogin(View v) {
        setResult(RESULT_OK);
        finish();
}

public void cancel(View v) {
       setResult(RESULT_CANCELED);
       finish();
}

调用登录活动:

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.

4

1 回答 1

-1

我不会为此堆积活动。

如果您需要启动登录活动,请启动活动并在您的 HomeActivity 中调用 finish()。

if(!loggedIn){
    Intent logInActivity = new Intent(MainActivity.this, LoginActivity.class);
    //Potentially display a toast to say why the user is being directed to the log in screen
    // add bundle into that flags to Go back to main activity. 
   logInActivity.put extra("activity", 1);
    startActivity(logInActivity);
    finish();
}

与登录活动类似,在您成功进行身份验证后,调用以下命令:

if(loggedIn){
    // get bundle it 
      Int a = get intent.getExtras().getInt("activity");
     if(a==1)
    Intent next= new Intent(LoginActivity.this, MainActivity.class);
    ///have a code for each activity that you could resume to
    startActivity(next);
    finish();
}

这应该可以缓解您的状态问题。

于 2013-11-14T09:06:59.923 回答