Android 为什么startActivityForResult的结果出现在活动真正开始之前?

Android 为什么startActivityForResult的结果出现在活动真正开始之前?,android,android-activity,Android,Android Activity,我有以下代码来启动活动: public boolean onOptionsItemSelected(final MenuItem item) { super.onOptionsItemSelected(item); switch (item.getItemId()) { case MENU_PREFS: startActivityForResult(new Intent(this, PreferencesActivity.class),1);

我有以下代码来启动活动:

public boolean onOptionsItemSelected(final MenuItem item) { 
    super.onOptionsItemSelected(item);
    switch (item.getItemId()) {
    case MENU_PREFS:
        startActivityForResult(new Intent(this, PreferencesActivity.class),1);
            break;
    case MENU_ABOUT:
        startActivityForResult(new Intent(this, AboutActivity.class),2);
            break;
        }
    return false;
    }
以及以下内容以获取结果:

    @Override
    protected void onActivityResult(final int requestCode, final int resultCode, final Intent data){

        switch (requestCode){

        case 1:

        case 2:
            if (resultCode==RESULT_CANCELED)
                finish();
        }

但onActivityResult在活动(用于结果)开始之前触发。这很奇怪。首先,它使用相应的请求代码(在我的例子中是1或2)重新运行resultCode=0的结果,这样我的主要活动就完成了。在相应的活动(结果)真正开始之后。这是安卓系统的一个已知问题或特性。请参阅涵盖类似问题的线程

活动开始时的代码是什么样子的?被调用活动中确定何时执行SetResult(Result.OK,1)以返回到原始调用方的标准是什么?在调用Finish()或执行SetResult指令之前,被调用的活动不会返回

我有工作正常的代码

        if (buttonSignOn.Text == "Proceed")
        {
            mAppFeatureMenuRetCD = "99";
            Intent ProcessAppFeatureMenu = new Intent();
            ProcessAppFeatureMenu.SetClass(this, typeof(AppFeatureMenu));
            ProcessAppFeatureMenu.PutExtra("CallingActName", "BPM_Activity1");
            ProcessAppFeatureMenu.PutExtra("AppFeatMenuStatusCode", "01");
            ProcessAppFeatureMenu.PutExtra("AppFeatMenuRetCd", "00");
            StartActivityForResult(ProcessAppFeatureMenu, Process_AppFeature_Menu);
            return;
        }




     public string ReturnToCallingActivity(Intent x, string y, string z)
     {

         x.PutExtra("CredStatCode", strBPMCredStatCode);
         x.PutExtra("RetActName", "ProgramSignOnStatus");
         x.PutExtra("MiscStuff", strCallingActMiscStuff);
         switch (y)
         {
             case "01":
                 SetResult(Result.Ok, x);
                 break;
             case "02":
                 SetResult(Result.Canceled,x);
                 break;
             default:
                 SetResult(Result.FirstUser, x);
                 break;
         }

         //Finish();
         return conOK;
     }