同步startActivityForResult - 等待活动完成

时间:2011-06-14 23:59:48

标签: android asynchronous android-activity android-intent wait

我有一个应用程序,我正在启动一个新的Activity,并且需要在继续之前获得活动的结果。

我意识到startActivityForResult是异步/非阻塞的,我可以在onActivityResult回调中获得活动的结果。

所以我想我正在寻找的是等待活动返回的最佳方式...... 也许这样的事情?或者有更好的方法吗?

活动启动器功能:

public String ActivityLauncher()
{
   //Set up Intent
   startActivityForResult(intent, 1);
   while (mIsActivityDone == false)
   {
       Thread.Sleep(250);
   }
   //Continue with processing
   String data = "<Data from Activity">
   return data;
}

回调:

protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
   //Pull out the data
   mIsActivityDone = true;
}

需要将数据返回到更高级别的调用函数 - 这就是我需要在ActivityLauncher函数中等待结果的原因。

谢谢!

2 个答案:

答案 0 :(得分:7)

这将阻止您的UI线程,因此其他活动也不会执行。 我会使用更高级函数提供的某种回调类,在这种情况下调用onActivityResult中的回调函数

答案 1 :(得分:2)

如果您可以从新线程开始这些活动,那么Android会为您提供解决方案。您可以使用Instrumentation。你为什么需要一个新线程?因为startActivitySync将检查您是否在主线程中调用它。如果它的主线程然后它将抛出异常。

Instrumentation可让您监控活动。您可以阻止或非阻止方式监视此活动。

IntentFilter intF = new IntentFilter("ACTIVITY.THAT.YOU.WANT.TO.LAUNCH");

Instrumentation instrumentation = new Instrumentation();

Instrumentation.ActivityMonitor monitor = instrumentation.addMonitor(intF, null, true);
Intent i = new Intent("ACTIVITY.THAT.YOU.WANT.TO.LAUNCH");
instrumentation.startActivitySync(i);