Android和sendOrderedBroadcast-如何立即获得结果



在某些情况下,我需要从错误意图中获取数据,并尝试使用sendOrderedBroadcast。但是这个调用是异步的,我不知道如何等待。我尝试:

onCreate(...)
{
    // ...
    sendOrderedBroadcast(...);
    if (someResult!=null)
        {
            // Never executed
        }
    // ...
}
onButtonPressed(...)
{
    if (someResult!=null)
        {
            // Often fires
        }
}

我想我需要调用类似Windows消息循环的

while (::PeekMessage(...)) 
    {
        GetMessage(...);
    }

在sendOrderedBroadcast之后和使用someResult之前。

我该怎么做?或者,还有更方便、更正确的方法吗?

UPD更多详细信息

public class DetailsChecker extends BroadcastReceiver{
    public void onReceive(Context context, Intent intent)
        // ...
}
// ...
sendOrderedBroadcast(detailsIntent, null, new DetailsChecker(), null,
            Activity.RESULT_OK, null, null);

实际上,这是可能的。您可以指定一个将在sendOrderedbroadcast中接收响应的处理程序,这样您就可以在另一个线程上接收响应,并在处理广播时阻止UI线程。类似的东西:

    final Object monitor = new Object();
    HandlerThread thread = new HandlerThread("blabla");
    thread.start();
    synchronized (monitor) {
        Intent intent = new Intent("nanana");
        context.sendOrderedBroadcast(intent,
                null,
                new BroadcastReceiver() {
                    @Override
                    public void onReceive(Context context, Intent intent) {
                        // mystuff
                        someResult = tagada;
                        synchronized(monitor) {
                            monitor.notify();
                        }
                    }
                },
                new Handler(thread.getLooper()),
                Activity.RESULT_OK,
                null,
                null
        );
        try {
            monitor.wait(2000); // timeout for receiving the result
        } catch (InterruptedException e) {
        }
    }
    thread.quit();
    if (someResult != null) {
        // gets executed
    }

当然,"阻塞UI线程是不好的,m'kaaaay"。但我想你知道你在做什么。

相关内容

  • 没有找到相关文章

最新更新