Điều này sẽ làm những gì bạn cần. Nó sử dụng notify()
và wait()
với một đối tượng đã biết để làm cho phương pháp này đồng bộ trong tự nhiên. Mọi thứ bên trong của run()
sẽ chạy trên chuỗi giao diện người dùng và sẽ trả lại quyền kiểm soát thành doSomething()
sau khi hoàn tất. Điều này tất nhiên sẽ đặt các thread gọi để ngủ.
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);
}
}
}
Tôi không hiểu thông báo gọi() trên chuỗi sẽ làm gì? –