神似安卓官方的一个bug。(原因找到)

我碰到一个安卓的bug但是不能确定是我错了还是确实是安卓的bug。暂且提交。说不定哪天心情好了可以去stack overflow问问 。
我的andriod studio版本是1.2.2
模拟器是安卓自带的,虚拟机是Nexus_5 api 22
我的代码是这样的
mainActivity里面通过按键进入secondActivity。然后secondActivity按返回键返回一个intend。然后在mainActivity通过onActivityResult用log输出出来

mainActivity调用代码

public void onClick(View v) {

 Intent intent = new Intent(MainActiveity.this, secondActivity.class);
startActivityForResult(intent, 1);
}

secondActivity的返回代码

 public void onBackPressed() {
        Log.d("secondActivity","backPressed Perform");
        super.onBackPressed();
        Intent intent = new Intent();
        intent.putExtra("data_return", "Hello");

        setResult(RESULT_OK, intent);//我这里设置的是ok。
//        RESULT_FIRST_USER
        finish();
    }

mainActivity里面的处理代码


 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.d("FirstActivity", "onActivityResult Perform");
        switch (requestCode) {
            case 1:
                if (resultCode == RESULT_OK) {
                    Log.d("FirstActivity", "into Perform");
                    String returnedData = data.getStringExtra("data_return");
                    Log.d("FirstActivity", returnedData);
                } else if(resultCode == RESULT_CANCELED)
            {
                Log.d("FirstActivity", "RESULT_CANCELED Perform");
            }
            else
            {
                Log.d("FirstActivity", "else Perform");
            }
            break;
            default:
                Log.d("FirstActivity", "default Perform");
        }
    }

然而。我的到的运行结果是

07-14 12:57:09.268    6439-6439/com.example.bleuesprit.test D/secondActivity﹕ backPressed Perform
07-14 12:57:09.311    6439-6439/com.example.bleuesprit.test D/FirstActivity﹕ onActivityResult Perform
07-14 12:57:09.311    6439-6439/com.example.bleuesprit.test D/FirstActivity﹕ RESULT_CANCELED Perform
07-14 12:57:09.416    6439-6460/com.example.bleuesprit.test W/EGL_emulation﹕ eglSurfaceAttrib not implemented

安卓强制吧我的结果改成了RESULT_CANCELED,即使我强制说返回的状态是ok的。
虽然一般情况下返回键确实不应该是ok。但是我已经说这样返回ok。为毛他要给我改成canceled???这是不是一个bug呢?有待探究

更新。原因
这里是我的问题。因为我在调用setResult之前调用了super.onBackPressed();
super.onBackPressed();里面调用了finish。所以实际上finish方法在setResult之前已经执行了。

感谢mml的指出

你可能感兴趣的:(移动开发)