Синхронный startActivityForResult – ожидание активности для завершения

У меня есть приложение, в котором я запускаю новое действие и перед тем, как продолжить, должен получить результат этой операции.

Я понимаю, что 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.

Благодаря!

Это заблокирует ваш поток пользовательского интерфейса, чтобы другие действия не выполнялись. Я бы использовал какой-то класс обратного вызова, предоставляемый функцией более высокого уровня, в такой ситуации и вызывал его функцию обратного вызова в onActivityResult

Если вы можете начать эти действия с нового потока, то у Android есть решение для вас. Вы можете использовать Instrumentation. Зачем вам нужен новый поток? Поскольку startActivitySync проверяет, вызвано ли вы его вызовом в основном потоке. Если его основной поток будет выдавать исключение.

Инструментарий позволяет контролировать активность. Вы можете отслеживать эту активность как с блокировкой, так и без блокировки.

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