Android: возможно ли, чтобы фоновый поток блокировался до тех пор, пока поток пользовательского интерфейса не завершит работу?

Возможно ли, чтобы фоновый поток помещал сообщение в обработчик основного потока пользовательского интерфейса и блокировал до тех пор, пока это сообщение не будет обслуживаться?

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

Это должно делать то, что вам нужно. Он использует notify() и wait() с известным объектом, чтобы сделать этот метод синхронным по своей природе. Все, что внутри run() будет запускаться в потоке пользовательского интерфейса и будет возвращать элемент управления doSomething() после его завершения. Это, конечно же, заставит вызывающий поток спать.

 public void doSomething(MyObject thing) { String sync = ""; class DoInBackground implements Runnable { MyObject thing; String sync; public DoInBackground(MyObject thing, String sync) { this.thing = thing; this.sync = sync; } @Override public void run() { synchronized (sync) { methodToDoSomething(thing); //does in background sync.notify(); // alerts previous thread to wake } } } DoInBackground down = new DoInBackground(thing, sync); synchronized (sync) { try { Activity activity = getFromSomewhere(); activity.runOnUiThread(down); sync.wait(); //Blocks until task is completed } catch (InterruptedException e) { Log.e("PlaylistControl", "Error in up vote", e); } } } 
Intereting Posts