2012-06-18 30 views
14

Tôi mới sử dụng chương trình Android, vì vậy, tôi đang gặp một số vấn đề chung về cách chọn cách tốt nhất để thiết kế ứng dụng của tôi.Dịch vụ Android có thể cập nhật giao diện người dùng của hoạt động đã bắt đầu như thế nào?

Điều tôi muốn làm cơ bản là trình phát đa phương tiện. Tôi muốn trình phát đa phương tiện chạy trên một dịch vụ vì tôi muốn nó phát khi hoạt động không được hiển thị.

Câu hỏi của tôi là, làm thế nào tôi có thể cập nhật giao diện người dùng trên hoạt động của tôi tùy thuộc vào dòng chảy lao động dịch vụ (ví dụ, những thay đổi bài hát và tôi muốn tên của nó sẽ được hiển thị)?

Tôi đoán tôi có thể sử dụng một Broadcast Manager địa phương để gửi các ý định từ dịch vụ của tôi để hoạt động của tôi và gọi cập nhật giao diện người dùng (nó có vẻ phải không?)

NHƯNG ... Tôi sẽ muốn dịch vụ của tôi để làm một số nội dung trong khi phát nhạc (như truy vấn/cập nhật DB). Vì lý do này, tôi đã nghĩ đến việc chạy dịch vụ trên một quy trình khác (hoặc chuỗi?).

SO .. Tôi đoán, đang chạy dịch vụ trên một quy trình khác, tôi sẽ không thể sử dụng trình quản lý phát sóng cục bộ (điều này có đúng không?).

Tôi hy vọng tôi đã giải thích sự nghi ngờ của tôi là gì ... ai cũng có thể giúp đỡ?

cảm ơn rất nhiều!

Trả lời

15

Sử dụng một nhiệm vụ async trong dịch vụ của bạn để xử lý các công việc bạn cần phải thực hiện trong nền. Khi bạn cần cập nhật giao diện người dùng, hãy sử dụng phương thức progressUpdate của tác vụ không đồng bộ để gửi phát lại cho bất kỳ hoạt động nào quan tâm.

Ví dụ giả.

Hoạt động

onCreate -> startService và tạo broadcastReceiver mới. Đảm bảo ghi đè phương thức onReceive và kiểm tra ý định cụ thể.

mLocalBroadcastManager = LocalBroadcastManager.getInstance(this); 

    broadcastReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if(intent.getAction().equals(yourActionType)) { 
       //do work here 
      } 
     } 
    }; 

onResume -> đăng ký như một máy thu phát sóng

IntentFilter filter = new IntentFilter(); 
    filter.addAction(yourActionType); 
    mLocalBroadcastManager.registerReceiver(broadcastReceiver, filter); 

Dịch vụ

onCreate -> tạo quản lý phát sóng.

mLocalBroadcastManager = LocalBroadcastManager.getInstance(this); 

onStartCommand -> tạo và thực hiện tác vụ không đồng bộ mới nếu cần. (OnStart có thể được gọi nhiều lần)

Async công tác

doInBackground -> Bắt đầu bất cứ công việc nền mà bạn cần. Trong trường hợp này chơi nhạc. Thực hiện cuộc gọi định kỳ để publishProgress

onProgressUpdate -> sendBroadcast cho thấy tình trạng cập nhật

Intent broadcastIntent = new Intent(yourActionType); 
    broadcastIntent.putExtra(whateverExtraData you need to pass back); 
    mLocalBroadcastManager.sendBroadcast(broadcastIntent); 

onPostExecute -> sendBroadcast chỉ ra nhiệm vụ kết thúc

+0

Thanks a lot.nhưng về tin nhắn quảng bá thì sao? Không phải là họ không thuận tiện để được sử dụng tại địa phương? – super

+0

@super Tôi đã chỉnh sửa câu trả lời của mình để bao gồm ví dụ về cách các chương trình phát sóng địa phương được sử dụng. Đảm bảo có android-support-v4.jar trong thư viện của bạn nếu bạn đang nhắm mục tiêu một nhà tù cũ. – Mike

+0

cảm ơn rất nhiều. Tôi sẽ cho bạn biết làm thế nào nó đi;) – super

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