我有一个应用程序,我正在启动一个新的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函数中等待结果的原因。
谢谢!
答案 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);