Android onActivityResult有时在子活动完成时不调用

Android onActivityResult有时在子活动完成时不调用,android,subactivity,Android,Subactivity,在测试期间,我注意到有时我的子活动的finish()不会在ActivityResult上执行。大多数情况下,它工作正常,我不知道什么时候,为什么会出现这个问题 子活动开始: public void launchSubActivity(Class<? extends Activity> subActivityClass, Bundle data, OnSubActivityResult callback) { Intent i = new Intent(thi

在测试期间,我注意到有时我的子活动的finish()不会在ActivityResult上执行。大多数情况下,它工作正常,我不知道什么时候,为什么会出现这个问题

子活动开始:

public void launchSubActivity(Class<? extends Activity> subActivityClass, Bundle data,
        OnSubActivityResult callback) {

    Intent i = new Intent(this, subActivityClass);
    if(data!=null) i.putExtras(data);

    Random rand = new Random();
    int correlationId = rand.nextInt();

    _callbackMap.put(correlationId, callback);

    startActivityForResult(i, correlationId);

}
onActivityResult(作者):

问题是“correlationId”<0:

/**使用此方法启动子活动,并提供一个函子来处理结果-确定或取消*/
public void launchSubActivity(类subActivityClass,ResultCallbackIF回调){
意向i=新意向(此,子活动类);
Random rand=新的Random();
int correlationId=rand.nextInt();
/*
os correlationId的值:
1972479154
477929567
-1246508909=负=无效!
*/
if(correlationId<0)
correlationId*=-1;
_callbackMap.put(correlationId,callback);
startsubacity(i,correlationId);
}

也许您有一些开发人员选项,如kill activity flag或limit background process

转到设置->未选中开发人员选项
不保留活动
后台进程限制
设置为标准限制


有关更多信息,请检查和

是否可以发布onActivityResult()实现?何时调用
select()
?单击子活动中的按钮将调用select()。我使用调试器进行了检查,并确保始终执行select(),而不总是显示第一次登录onActivityResult。
public void select() {
    Bundle b = new Bundle();
    b.putInt("YEAR", year_result);
    b.putInt("MONTH", month_result);
    b.putInt("DAY", day_result);
    this.getIntent().putExtras(b);
    this.setResult(RESULT_OK, this.getIntent());
    this.finish();
}
/**
 * this is the underlying implementation of the onActivityResult method that
 * handles auto generation of correlationIds and adding/removing callback
 * functors to handle the result
 */
@Override
protected void onActivityResult(int correlationId, int resultCode,
        Intent data) {

    Log.d(Prototype.TAG, "SimpleActivity Result "+resultCode);

    try {
        OnSubActivityResult callback = _callbackMap.get(correlationId);

        switch (resultCode) {
        case Activity.RESULT_CANCELED:
            callback.onResultCancel(data);
            _callbackMap.remove(correlationId);
            break;
        case Activity.RESULT_OK:
            callback.onResultOkay(data);
            _callbackMap.remove(correlationId);
            break;
        default:
            Log.e(Prototype.TAG,
                    "Couldn't find callback handler for correlationId");
        }
    } catch (Exception e) {
        Log
                .e(Prototype.TAG,
                        "Problem processing result from sub-activity", e);
    }

}
/** use this method to launch the sub-Activity, and provide a functor to handle the result - ok or cancel */
public void launchSubActivity(Class subActivityClass, ResultCallbackIF callback) {

  Intent i = new Intent(this, subActivityClass);
  Random rand = new Random();
  int correlationId = rand.nextInt();

/*
Values os correlationId:

1972479154

477929567

-1246508909 = NEGATIVE = INVALID! 

*/

  if (correlationId < 0)
      correlationId *= -1;

  _callbackMap.put(correlationId, callback);
  startSubActivity(i, correlationId);
}