调用finish()不会停止执行代码

时间:2012-04-19 13:10:57

标签: android android-activity

我有两个活动,我们称之为A和B.

A是可以从应用中的两个位置开始的活动。我希望能够知道A是从1号还是2号开始,所以在B中我称之为A:

Intent i = new Intent(B.this, A.class);
i.putExtra("code", code);
startActivityForResult(i, code);

code是一个值为1的int。)

在A的onCreate方法中,我这样做:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    Intent i = getIntent();
    Bundle extras = i.getExtras();
    if(extras != null)
    {
        int code = extras.getInt("code");
        if(code == 1)
        {
            ClearReleasesCache(); // just a private method of A
            setResult(1, i);                
            finish();
            return;
        }
    }

    // do everything else as usual
    setContentView...
}

现在问题是这个(我在调试中注意到了它):

当我从B发布A时,我希望A 完成,如此处的代码所示。当我从另一个不是B的活动中启动A时,我希望它像往常一样运行(并且确实如此)。但是finish()return在这里什么都不做 - 我可以看到在回调之后调试它时,它会跳回到onCreate,它不会关闭活动。

也就是说,B中的onActivityResult()永远不会被调用。

这里有什么问题?

5 个答案:

答案 0 :(得分:1)

如何才能在创建之前完成..一旦当前执行完成就会完成..不是突然出现在某些事物的中间......而且它也有意义......

答案 1 :(得分:0)

 if(extras == null || extras.getInt("code") != 1) {
         // do everything else as usual
 } else
       finish();

你不能切换if条件吗?

编辑:但你确定return语句没有问题吗?

答案 2 :(得分:0)

你也可以在finish()之后添加一个return语句。

答案 3 :(得分:0)

尝试设置此setResult(RESULT_OK, i);,当我将resultCode传递给RESULT_OK时,我遇到了类似的问题,在这种情况下,onActivityResult()从未被调用

答案 4 :(得分:0)

你看起来是正确的 - 你有没有检查你的父活动,看看它是否可以重新启动活动与空的额外?

您还可以稍微调整逻辑以进行修复:

Intent i = getIntent();
Bundle extras = i.getExtras();
if(extras != null && extras.getInt("code") == 1) {
    ClearReleasesCache(); // just a private method of A
    setResult(1, i);                
    finish();
    return;
} else {

    // do everything else as usual
    setContentView...
}

但是,如果你的父(调用)Actvity的逻辑是不正确的,那么你很可能得到相同的结果。