首页 文章

按下startActivityForResult和Home键后调用活动的状态

提问于
浏览
3

我有一个名为 HomeActivity 的启动器Activity .

并且 LoginActivity 用户必须登录才能访问其他屏幕 .

HomeActivity 标记为 singleTask .

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

在LoginActivity中,我只是调用finish()来解除LoginActivity,假设HomeActivity是要显示的堆栈中的下一个活动 .

此设置适用于大多数情况,除了一个 .

  • 用户未登录 .

  • 启动应用程序 - >启动HomeActivity

  • 未检测到登录 - >启动LoginActivity

  • 在LoginActivity上,按home .

  • 启动应用程序,我看到了LoginActivity .

  • 登录,登陆成功后,LoginActivity就完成了 .

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

我没有将开发者选项 "Don't keep activities" 变为 off . 所以,想知道活动堆栈是如何失去HomeActivity的,因为我希望在完成LoginActivity之后HomeActivity成为下一个活动 .

Cancel or Login methods in LoginActivity:

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

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

Calling LoginActivity:

onCreate()onNewIntent() 调用 .

Why onNewIntent() is needed? 因此,在其他任何地方,我都可以启动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);
}

On Activity Result of HomeActivity:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(resultCode == RESULT_CANCELED){
                finish();
        }
        super.onActivityResult(requestCode, resultCode, data);
}

The manifest file:

<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>

Update: 使用 singleTop 似乎工作正常,但我不知道为什么它与 singleTask 的行为相同 .

1 回答

  • 0

    我不会为此积累活动 .

    如果您需要启动登录活动,请启动活动并在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();
    }
    

    这应该可以缓解你的国家问题 .

相关问题