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