神似安卓官方的一个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的指出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值