android:make activity A等待活动B完成并返回一些值

我有一个需要…的程序

  1. Activity A ,做一些工作
  2. 启动Activity BWebView ),让用户填写一些信息,然后收集结果
  3. 然后最后处理数据

目前我这样设置:

Activity A

 ... startActivityForResult(this, new Intent(ActivityB.class)); ... protected void onActivityResult(int requestCode, int resultCode, Intent data) { ... //get result from data, do something with it ... } 

这似乎是一种尴尬的方法,因为我需要将任务分成许多不同的部分。 我需要处理所有部分抛出的exception,这样做很不方便。 有更好的方法吗?

此外,在上面的步骤(3)之后,我将多次重复此步骤,每次将最终结果发布到textview。 我认为这意味着我需要将它们放入AsyncTask ,但这会让它变得更加困难( onActivityResult应放在哪里?)。

简单的答案是没有别的办法。 这就是在Android中完成它的意思。 我相信,唯一缺少的是将请求代码传递给活动B.如果没有它,您将无法区分哪个其他活动返回到活动A.

如果要从A调用不同的活动,请在启动活动时使用不同的requestCode参数。 此外,您可以使用相同的Intent方法将任何数据传递回活动B(好的,几乎任何):

 public final static int REQUEST_CODE_B = 1; public final static int REQUEST_CODE_C = 2; ... Intent i = new Intent(this, ActivityB.class); i.putExtra(...); //if you need to pass parameters startActivityForResult(i, REQUEST_CODE_B); ... //and in another place: Intent i = new Intent(this, ActivityC.class); i.putExtra(...); //if you need to pass parameters startActivityForResult(i, REQUEST_CODE_C); 

然后在你on ActivityResult

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch(requestCode) { case REQUEST_CODE_B: //you just got back from activity B - deal with resultCode //use data.getExtra(...) to retrieve the returned data break; case REQUEST_CODE_C: //you just got back from activity C - deal with resultCode break; } } 

OnActivityResult在GUI线程上执行,因此您可以在此处直接进行任何更新。

最后,在活动B中,您将拥有:

 Intent resultIntent = new Intent(); resultIntent.putExtra(...); // put data that you want returned to activity A setResult(Activity.RESULT_OK, resultIntent); finish(); 

我不确定为什么你需要AsyncTask来处理结果。