Как я должен вызвать quit() для экземпляра Looper после того, как я вызвал loop()

Я пытаюсь запустить Looper в отдельном потоке. По сути, цель инициирования петлителя в этом потоке состоит в том, чтобы он запускал соответствующие экземпляры SoundPool.OnLoadCompleteListener.

Итак, код:

Looper.prepare();
Looper.loop();

Однако вызов цикла не возвращается из-за бесконечного цикла. Как же мне тогда вызвать Looper.myLooper.quit()?


person Chris Stryczynski    schedule 22.09.2014    source источник
comment
из другой ветки? ...   -  person Selvin    schedule 22.09.2014
comment
Как я мог это сделать? Будет ли это простым случаем передачи Looper.myLooper(), а затем вызова quit() для этого экземпляра Looper?   -  person Chris Stryczynski    schedule 22.09.2014
comment
я почти уверен, что вы делаете что-то не так... основная цель петлителя - потреблять сообщения из другого потока... это просто inf-цикл, он проверяет собственную очередь сообщений и потребляет, если есть сообщение.. ... сообщения могут публиковаться из других потоков, но они выполняются в потоке цикла ... не могли бы вы предоставить больше контекста того, чего вы хотите достичь?   -  person Selvin    schedule 22.09.2014
comment
вам не нужен какой-либо другой поток или Looper в этом потоке, просто позвольте SoundPool.OnLoadCompleteListener вызываться в основном потоке пользовательского интерфейса   -  person pskink    schedule 22.09.2014
comment
Правильно, я не выдаю никаких дополнительных сообщений/обработчиков. Единственная причина, по которой я использую петлитель в этом потоке, заключается в том, что я хочу запустить OnLoadCompleteListener(s), которые, кажется, выполняются только в петлителе. Я не хочу, чтобы он работал в основном потоке, так как я использую семафор, чтобы заблокировать его, пока все OnLoadCompleteListener(ы) не будут завершены. Как описано здесь: stackoverflow.com/a/14782648/1663462   -  person Chris Stryczynski    schedule 22.09.2014