2009-08-24 19 views
17

Tôi có một dịch vụ đang tải xuống một tệp. Khi tải xuống xong, tôi muốn cập nhật danh sách "Tải xuống tệp" của tôi trong số Activity của tôi, nhưng chỉ khi Activity đang chạy. Tôi không muốn Activity bắt đầu nếu nó chưa chạy.Làm cách nào để sử dụng ý định cập nhật hoạt động?

Tôi đã hy vọng tôi có thể làm điều này bằng cách tạo một Intent mới với một số cờ đặc biệt.

Bất kỳ ai có ý tưởng nào về cách tôi có thể đạt được điều này? Một ví dụ mã nhỏ có thể?

Trả lời

19

Bạn có thể tạo dụ BroadcastReceiver mới và làm điều gì đó dọc theo những dòng trên onResume Hoạt động của bạn() phương pháp:

registerReceiver(myReceiver, new IntentFilter(DownloadService.ACTION_FILE_DOWNLOADED)); 

Sau đó, ghi đè onReceive myReceiver của() phương pháp để gọi một chức năng cập nhật các thành phần bạn muốn :

@Override 
public void onReceive(Context context, Intent intent) { 
... 
    updateViewWithData(service.getNewFileData()); 
... 
} 

On onPause Hoạt động của bạn (phương pháp), chỉ cần unregister người nhận:

unregisterReceiver(myReceiver); 

Tôi hy vọng rằng điều này sẽ giúp bạn, hãy tự hỏi nếu có điều gì đó không rõ ràng.

+0

Đây là cách rất tốt giao tiếp. Nhưng phải làm gì trong trường hợp kết quả được giao, khi hoạt động ở trạng thái tạm dừng? Vì vậy, sau khi hoạt động onResume có thể chờ đợi một thời gian dài cho kết quả. Và sẽ không nhận được dữ liệu nào vì dữ liệu bị bỏ qua. –

3

Cách tốt nhất để thực hiện việc này là ràng buộc hoạt động "Tệp đã tải xuống" của bạn với dịch vụ. Khi bạn liên kết dịch vụ, trong hàm onServiceConnected, hãy đăng ký một cuộc gọi lại Binder. Sau đó, bất cứ khi nào bạn có dữ liệu mới, dịch vụ chỉ gọi lại cuộc gọi đó. Nếu hoạt động không hoạt động, danh sách gọi lại ở phía dịch vụ sẽ trống, vì vậy nó sẽ không thông báo cho hoạt động của bạn.

Đối với một ví dụ về cách tiếp cận này, hãy nhìn vào RemoteService.java trong Android SDK:

samples \ ApiDemos \ src \ com \ ví dụ \ android \ apis \ ứng dụng \

+0

Điều gì sẽ là lợi thế của việc này, so với mục đích nhắn tin như Dimitar Dimitrov đề xuất? Cảm ơn – urSus

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