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

时间:2013-11-14 08:10:01

标签: android android-activity android-homebutton

我有一个名为 HomeActivity 的启动器活动。

LoginActivity ,用户必须登录才能访问其他屏幕。

HomeActivity 标记为 singleTask

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

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

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

  1. 用户尚未登录。
  2. 启动应用 - >推出HomeActivity
  3. 未检测到登录信息 - >启动LoginActivity
  4. 在LoginActivity上,按home。
  5. 启动应用,我看到了LoginActivity。
  6. 登录,登录成功后,LoginActivity就完成了。
  7. 我没有看到HomeActivity,而是看到HomeScreen。这是预期的吗?我做错了吗?

    我没有开发者选项“不要保持活动” 关闭。所以,想知道活动堆栈是如何失去HomeActivity的,因为我期望在完成LoginActivity之后HomeActivity成为下一个活动。

    在LoginActivity中取消或登录方法:

    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 相同。

1 个答案:

答案 0 :(得分: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();
}

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