2010-07-19 32 views
5

Có thể cho một chuỗi nền để đưa thư vào trình xử lý của chuỗi giao diện người dùng chính và chặn cho đến khi thông báo đó được phục vụ không?Android: Có thể cho chuỗi nền để chặn cho đến khi chuỗi giao diện người dùng kết thúc hoạt động?

Ngữ cảnh cho điều này là tôi muốn dịch vụ từ xa của mình phục vụ từng hoạt động đã xuất bản khỏi chuỗi giao diện người dùng chính của nó, thay vì chuỗi threadpool mà từ đó nó nhận được yêu cầu IPC.

Trả lời

4

Điều này sẽ làm những gì bạn cần. Nó sử dụng notify()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); 
     } 
    } 
} 
+1

Tôi không hiểu thông báo gọi() trên chuỗi sẽ làm gì? –

Các vấn đề liên quan