2010-06-18 42 views
15

Tôi có nhiều hoạt động trong ứng dụng của mình, mọi hoạt động đều gọi bindserviceunbindservice để tìm nạp dữ liệu. Trong hoạt động đầu tiên bindserviceunbindservice hoạt động tốt. Trong hoạt động thứ hai (mà tái sử dụng dịch vụ tương tự) phương pháp dịch vụ ràng buộc hoạt động tốt, nhưng unbindservice phương pháp mang lại ngoại lệ:IllegalArgumentException: Dịch vụ chưa được đăng ký:

IllegalArgumentException: Service not registered: 

Xin vui lòng giúp.

+0

bạn đang sử dụng ngữ cảnh nào để liên kết với dịch vụ? – NikkyD

+0

Vui lòng đăng logcat. –

+0

Thảo luận tốt hơn: https://stackoverflow.com/questions/12277673/android-services-error-service-not-registered – dskrvk

Trả lời

5

Nhiều khách hàng có thể kết nối với dịch vụ cùng một lúc. Tuy nhiên, hệ thống gọi phương thức onBind() của dịch vụ của bạn để truy xuất IBinder chỉ khi máy khách đầu tiên liên kết. Hệ thống sau đó cung cấp cùng một IBinder cho bất kỳ khách hàng bổ sung nào ràng buộc, mà không cần gọi lại onBind() một lần nữa. http://developer.android.com/guide/components/bound-services.html Nhiều thành phần có thể liên kết với dịch vụ cùng một lúc, nhưng khi tất cả chúng không được liên kết, dịch vụ sẽ bị hủy. Vì vậy, vui lòng kiểm tra xem bạn có hủy dịch vụ ở lần đầu không. Có thể vượt qua IBind cho mọi hoạt động tốt hơn nhiều. Bởi vì nó chỉ trả lại chỉ một.

+1

Đảm bảo bạn chỉ tạo một unbind cho mỗi dịch vụ trong một Hoạt động. Tôi đã làm 2 unbinds vô tình và nó bị rơi với lỗi này vào thứ hai. Việc xóa bỏ liên kết không trùng lặp đã giải quyết được vấn đề của tôi. – eliteslayer

9

Câu hỏi của NikkyD rất tốt và nó đã giúp tìm ra nguyên nhân của ngoại lệ này trong trường hợp của tôi. Đối với bất kỳ ai ngoài đó gặp phải vấn đề tương tự, hãy đảm bảo rằng lệnh gọi bindService và lệnh unbindService của bạn được thực hiện dựa trên cùng một ngữ cảnh. Hy vọng nó giúp.

+0

yep đó là chính xác nó cho tôi - Tôi đã ràng buộc thực hiện với bối cảnh App nhưng vô tình đã làm unbind với các hoạt động cxt. – Maks

+0

Ngoài ra vấn đề của tôi là tôi đã sử dụng bối cảnh hoạt động để ràng buộc và ứng dụng để unbind. Bạn không được làm điều đó. – Pihhan

0

Tôi gặp sự cố này với API cũ. (Android 2.2) Tôi đã nhận lỗi này khi tôi gọi phương pháp này: (từ các hướng dẫn thanh toán)

@Override 
    public void onDestroy() { 
     super.onDestroy(); 
     try { 
      if (mHelper != null) mHelper.dispose(); 
      mHelper = null; 
     }catch (IllegalArgumentException e){ 
      Log.d("TMA Billing Android 2.2","Error: "+e.getMessage()); 
      mHelper = null; 
     } 

    } 

Như bạn thấy đấy, tôi được bao quanh nó với Try Catch và bây giờ nó đang làm việc với không có vấn đề trên Android 2.2 .

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