2012-04-23 43 views
6

Tôi cần phải kết hợp hai danh sách mà mỗi danh sách được trả về sau Cuộc gọi không đồng bộ riêng biệt của riêng nó. Làm thế nào để phối hợp tốt nhất các cuộc gọi Async như thế này. Có bất kỳ phương pháp SDK chuẩn nào để chờ cho đến khi một tác vụ không đồng bộ khác đã hoàn thành không?Android Cách đồng bộ hóa hai tác vụ Async?

+0

Điều gì về kết hợp công việc của cả hai asynctask trong một đơn? – dmon

+0

Hoặc sử dụng AsyncTask.executeOnExecutor (singleThreadPoolExecutor) xử lý việc thực hiện xếp hàng. – yorkw

Trả lời

0

Java có một số nội dung thú vị như lớp Tương lai và lượt thích. Không sử dụng để mô tả khung này ở đây có nhiều tài nguyên trên mạng. Nó có thể là tốt hơn mặc dù để có một nhiệm vụ async duy nhất anyway có thực sự không cần phải chạy hai nhiệm vụ async cùng một lúc. Bạn có thể làm cả hai phần trong một doInBackground đơn

5

execute() gọi trả về một thể hiện của AsyncTask, bạn có thể tiết kiệm dụ này để kiểm tra sau, nếu nhiệm vụ đã hoàn thành hay không bằng cách gọi getStatus(), do đó, mã của bạn sẽ trông như thế này:

final AsyncTask<...> first_task; 
final AsyncTask<...> second_task; 

public someMethod() { 
    first_task = new MyFirstAsyncTask().execute(); 
    second_task = new MySecondAsyncTask().execute(); 
    // other things 
} 

private class MyFirstTask extends AsyncTask<...> { 
    // business as usual 

    protected void onPostExecute(SomeData[] result) { 
     if(second_task != null && second_task.get_status() == AsyncTask.Status.FINISHED) { 
      // start the task to combine results 
      .... 
      // 
      first_task = second_task = null; 
     } 
    } 
} 

private class MySecondTask extends AsyncTask<...> { 
    // business as usual 

    protected void onPostExecute(SomeData[] result) { 
     if(first_task != null && first_task.get_status() == AsyncTask.Status.FINISHED) { 
      // start the task to combine results 
      .... 
      // 
      first_task = second_task = null; 
     } 
    } 
} 

và tác vụ hoàn thành cuối cùng, có thể bắt đầu nhiệm vụ mới để kết hợp kết quả.

0

Điều đó thực sự phụ thuộc vào nhu cầu.

Bạn có cần đợi tất cả dữ liệu đến không? Nếu không chỉ thực hiện cuộc gọi yo chức năng của bạn với chức năng chặn đồng bộ trong hoạt động của bạn

Nếu có, bạn có mong đợi chúng hoạt động một lần không; do đó hai (hoặc X) tổng cộng? có thể bạn có thể kiểm tra: CoundDownLacth (http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html)

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