关闭来自不同活动的活动

时间:2014-04-21 11:26:41

标签: android android-activity

我有活动A,活动B,活动C.我从A到B,b显示登录页面。用户登录我关闭活动b和活动a ..并转到活动c。我怎么做到这一点?我使用全局变量并将活动A保留在内存中,因此当用户登录时...我会调用以下内容:

结束(); 全球变异活动a.finish()

现在问题在哪里?假设我的应用程序在低内存上运行,我转到后台并返回到我的应用程序。突然全局变量丢失,那解决方案是什么?

2 个答案:

答案 0 :(得分:1)

我的建议是,您为结果StartActivityForResult启动活动B,当您决定转到C时,设置活动B结果并完成它,当您这样做时,活动A的OnActivityResult方法获得用您设置的结果调用,这样就可以完成A。

示例代码:

活动A

private static final int ACTIVITY_B_CODE = 200;
private void startB(){
    Intent intent = new Intent(ActivityA.this, ActivityB.clasS);
    startActivityForResult(intent, ACTIVITY_B_CODE);
}

@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data){
    if (requestCode == ACTIVITY_B_CODE){
        if (resultCode == RESULT_OK){
            finish();
        }
    }
}

活动B:

private void startC(){
    Intent intent = new Intent(ActivityB.this, ActivityC.class);
    startActivity(intent);
    setResult(RESULT_OK);
    finish();
 }

更多信息:android documentations

答案 1 :(得分:0)

更好的方法是在登录后清除之前的活动堆栈并转到C.

这样,C就是活动堆栈的新顶部,活动A和B被移除。

Intent intent = new Intent(getApplicationContext(), ActivityC.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

修改

我个人在我自己的应用程序中遵循的另一种方法(可能听起来有点复杂,但有效)

使用特定的RequestCode从A启动B.

    Intent intent = new Intent(ActivityA.this, ActivityB.class);
    startActivityForResult(intent, LOGIN_INTENT);

在活动B中登录用户。成功登录后,在B中设置ResultCode并完成()B。

    onSuccessfulLoginCallback() {
         Intent resIntent = new Intent();
         setResult(LOGIN_OK, resIntent);
         finish();
}

控件现在返回到活动A.现在,在A的onActivityResult()中,检查RequestCode和ResponseCode。如果匹配,则启动活动C并完成A.

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == LOGIN_INTENT) {
            if(resultCode == LOGIN_OK){
            Intent homeIntent = new Intent(ActivityA.this,  ActivityC.class);
            startActivity(homeIntent);
            finish();
}