Synchronous startActivityForResult - Waiting for Activity to Complete

耗尽温柔 提交于 2019-11-28 07:37:20

问题


I have an application where I am launching a new Activity, and need to have the result of the activity before proceeding.

I realize that startActivityForResult is asynchronous / non-blocking, and that I can get the result of the activity in the onActivityResult callback.

So I guess what I'm looking for is the best way to wait for the activity to return... Something like this perhaps? Or is there a better way?

Activity Launcher Function:

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;
}

Callback:

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

The data needs to be returned to a higher level calling function - this is why I need to wait for the result in the ActivityLauncher function.

Thanks!


回答1:


This will block your UI thread so other activity will not execute either. I would use some kind of callback class provided by higher level function, in this kind of situation and call its callback function in onActivityResult




回答2:


If you can start these activities from a new thread then Android has a solution for you. You can use Instrumentation. Why do you need a new thread? Because startActivitySync will check if you its being invoked in a main thread. If its main thread then it will throw an exception.

Instrumentation lets you monitor an activity. You can monitor this activity in either blocking or non blocking fashion.

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);


来源:https://stackoverflow.com/questions/6351555/synchronous-startactivityforresult-waiting-for-activity-to-complete

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!