Yonathan1111 Ответов: 2

Как дождаться завершения задачи, точно так же, как вызвать функцию и принять ее результат, пока она не будет выполнена?


Дорогие все,

Я работал над проектом android, проблема, с которой я столкнулся, заключается в том, что мне нужно дождаться AsyncTask/service/thread/runnable, чтобы закончить свою работу и принять ее результат, когда она будет выполнена, чтобы операция продолжалась синхронно, однако код после вызова asyncTask/service..продолжает выполняться, что мне не нужно ... я думаю, что действительно пропустил что-то основное..

Приведенный ниже код - это то, что я пробовал, и я не включил то, что делает asyncTask...в doInBackground он делает ussd-вызов и автоматически входит в цикл while, чтобы получить перехваченное сообщение...что существует USSD-перехватчик, который помещает сообщение в глобальное общее предпочтение..цикл while ищет это конкретное сообщение и автоматически прерывается после matches...so мое желание-получить это сообщение и перейти к следующему утверждению...

Если моя проблема достаточно ясна, пожалуйста, помогите мне.
Пожалуйста, не стесняйтесь, если моя проблема не ясна.

Спасибо

Что я уже пробовал:

BackgroundMessageFinder asyncTask =
(BackgroundMessageFinder) новый BackgroundMessageFinder(Global. context, this,
новый BackgroundMessageFinder.AsyncResponse() {

@Ручная коррекция
public void processFinish(вывод строки) {
// isAccountValid = Boolean. parseBoolean ((вывод));
}
}).выполнить(констант.Предпочтительнее.UssdSmsMsg, "999", "457", "", "1234");

// попробуй {
пробовать {
Строку "test" = asyncTask.получить(); // получаем какой-то результат

asyncTask. wait(10000);
} catch (InterruptedException e) {
е.печатные();
} catch (ExecutionException e) {
е.печатные();
}


// продолжить после получения требуемого сообщения

OriginalGriff

Не "ударяйте" свой вопрос: это грубо, высокомерно, ненужно и не поможет вам получить более быстрый ответ. Во что бы то ни стало добавьте информацию, но просто отредактируйте ее, чтобы вернуть в начало списка "без ответа", это просто говорит: "Я важнее всех остальных, так что разберитесь с моим вопросом и игнорируйте остальное".
Как и все остальные, и все остальные вопросы. Если бы все были такими бездумными и грубыми, вы никогда не получили бы ответа ни на что, потому что все, что мы могли бы увидеть, было бы 100 страниц идиотов, сталкивающих все реальные вопросы на страницу 100+
Все, что вы делаете, это раздражаете людей и заставляете их намеренно даже не смотреть на ваш вопрос, не говоря уже о том, чтобы ответить на него.

Yonathan1111

Дорогой Оригиналгрифф, я не знаю, почему вы так к этому отнеслись, по крайней мере, у вас может быть возможность допросить меня по такому делу.все, что мне было нужно, - это получить концепцию, даже не кусок кода..Я не призывал и не включал слова, которые не разрешены в правилах codeproject..Я старался быть вежливым, насколько это было возможно. can..it странно, что в последнее время я получаю такой отклик..У меня есть 7-летняя история работы с codeproject..и получить такой ответ-это грубо..Английский - мой второй язык...и я прошу прощения за свой плохой язык skill..as вы сказали, что у меня нет намерения ставить свой вопрос сверху, а скорее исправить выражения, которые я использовал...спасибо..

OriginalGriff

Мой комментарий касался вашего "натыкающегося" вопроса: редактирование его без каких-либо изменений для того, чтобы переместить его обратно в начало списка без ответа. Система ведет журналы изменений и сообщает нам, какие изменения были сделаны - или в вашем случае не были сделаны.

Yonathan1111

Окей..У меня нет такого опыта в течение последних 7 лет, и это то, что я пытаюсь вам сказать ... и если вы внимательно посмотрите журналы изменений на вашей стороне, вы можете найти changes..at по крайней мере, я попытался внести исправления в название..

2 Ответов

Рейтинг:
2

David Crow

Запуск процесса, а затем блокировка всех других процессов, ожидающих результата, - это не тот способ использования мобильных устройств (смартфонов, планшетов). Это неправильный UX. Если основной поток (также называемый потоком пользовательского интерфейса) порождает другой поток для выполнения некоторой работы, основной поток должен продолжать работать. Когда вторичный или порожденный поток завершается, он связывается обратно с потоком пользовательского интерфейса со своими результатами.


Рейтинг:
0

Afzaal Ahmad Zeeshan

Как уже упоминалось, я бы уделил большое внимание тому факту, что переплетение вашего синхронного кода с асинхронным кодом-это плохой и плохой подход. Эти двое должны быть оставлены в покое и работать в своих собственных контекстах.

То, что вы создаете, полезно и действительно очень полезно в тех случаях, когда вам нужны некоторые операции ввода-вывода (например, запись в базы данных, чтение файлов, загрузка из сети) и т. д. AsyncTask и другие типы предусмотрены, но никогда не переплетают пользовательский интерфейс с фоновыми потоками. Вместо этого, когда что-то происходит в асинхронном режиме, выполняйте остальные задачи там — вы можете устанавливать события, обработчики и т. д. runOnUiThread вызовы для обновления пользовательского интерфейса по мере выполнения задачи.

Еще одна вещь: асинхронные задачи должны использоваться только для интенсивных операций ввода-вывода, для всего, что связано с процессором, рассмотрите возможность запуска его как службы, чтобы он работал в любое время в фоновом режиме и мог потреблять процессор, но не интенсивно.

Наконец, я бы рекомендовал вам прочитать документацию разработчика Android, чтобы узнать больше о том, что платформа Android может предложить для потоковой передачи: Отправка операций в несколько потоков | разработчики Android[^]

android-как использовать runOnUiThread-Stack Overflow[^]