2010-02-17 13 views
9

Đây là mã trong số Activity của tôi. Bắt đầu một Mục đích, sau đó là Kết nối, phải không?Làm cách nào để liên kết dịch vụ này trong Android?

hello_service = new Intent(this, HelloService.class); 
hello_service_conn = new HelloServiceConnection(); 
bindService(hello_service, hello_service_conn, Context.BIND_AUTO_CREATE); 

Nhưng câu hỏi của tôi là ... những gì nằm trong kết nối?

class HelloServiceConnection implements ServiceConnection { 
     public void onServiceConnected(ComponentName className,IBinder boundService) { 

     } 
     public void onServiceDisconnected(ComponentName className) { 

     } 
    }; 

Có thể ai đó cho tôi biết những gì tôi đang đưa vào onServiceConnectedonServiceDisconnected?

Tôi chỉ muốn kết nối cơ bản để ActivityService của mình có thể trao đổi với nhau.

Chỉnh sửa: Tôi đã tìm thấy một hướng dẫn hay và tôi thực sự có thể đóng câu hỏi này, trừ khi ai đó muốn trả lời. http://www.androidcompetencycenter.com/2009/01/basics-of-android-part-iii-android-services/

Trả lời

16

tôi muốn chỉ ra rằng nếu bạn làm theo các ví dụ dịch vụ được cung cấp bởi google thì dịch vụ của bạn sẽ bị rò rỉ bộ nhớ, hãy xem chaps bài tuyệt vời về cách để làm điều đó đúng (và bỏ phiếu cho các lỗi của Google liên quan)

http://www.ozdroid.com/#!BLOG/2010/12/19/How_to_make_a_local_Service_and_bind_to_it_in_Android

+3

Liên kết tới bài viết này không có sẵn, nhưng có thể tìm thấy tại: http://www.mongrel-phones.com.au/default/how_to_make_a_local_service_and_bind_to_it_in_and_android –

+0

liên kết đã chết ngay bây giờ – PKTomar

4

Ràng buộc dịch vụ khỏi hoạt động cần tránh vì nó làm cho các xác suất khi cấu hình hoạt động thay đổi (ví dụ: nếu thiết bị được xoay hoạt động sẽ được tạo lại từ đầu và ràng buộc sẽ phải được lặp lại tạo).
Vui lòng tham khảo ý kiến ​​từ Commonsware vào các bài sau đây trên stackoverflow
Communicate with Activity from Service (LocalService) - Android Best Practices

1

Để kết nối một dịch vụ cho một hoạt động, tất cả các bạn cần phải viết trong một thực hiện ServiceConnection là:

@Override 
public void onServiceDisconnected(ComponentName name) { 
mServiceBound = false; 
} 

@Override 
public void onServiceConnected(ComponentName name, IBinder service) { 
MyBinder myBinder = (MyBinder) service; 
mBoundService = myBinder.getService(); 
mServiceBound = true; 
} 

Đây mBoundService là một đối tượng của dịch vụ bị ràng buộc của bạn. Hãy xem cái này Bound Service Example.

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