首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Synchronous startActivityForResult -等待活动完成

Synchronous startActivityForResult -等待活动完成
EN

Stack Overflow用户
提问于 2011-06-15 07:59:48
回答 2查看 13.2K关注 0票数 8

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

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

所以我想我正在寻找的是等待活动返回的最好方法……也许是这样的东西?还是有更好的方法?

活动启动器功能:

代码语言:javascript
复制
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;
}

回调:

代码语言:javascript
复制
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
   //Pull out the data
   mIsActivityDone = true;
}

数据需要返回到更高级别的调用函数-这就是为什么我需要等待ActivityLauncher函数中的结果。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-15 08:03:51

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

票数 8
EN

Stack Overflow用户

发布于 2011-11-23 12:16:15

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

插装使您可以监视活动。您可以以阻塞或非阻塞方式监视此活动。

代码语言:javascript
复制
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);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6351555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档