2011-10-24 56 views
13

Tôi gặp sự cố khi sử dụng dịch vụ nền.
Tôi đang sử dụng dịch vụ từ 2 hoạt động.onServiceConnected() không được gọi là

Hoạt động đầu tiên bắt đầu Service với startService(intent) và liên kết với nó với bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

này hoạt động hoàn hảo và tôi có thể gửi một Message trong onServiceConnected().

Hoạt động thứ hai chỉ liên kết với các Service (kể từ khi nó đã bắt đầu), một lần nữa sử dụng bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

Bây giờ ở đây là vấn đề của tôi:
Trong hoạt động thứ hai tôi có một Button mà nên sử dụng dịch vụ khi tôi nhấn nó.
Tuy nhiên, onServiceConnected() không bao giờ được gọi trong hoạt động này, vì vậy tôi không thể nhận được các chất kết dính để tạo ra một Messenger để gửi Message đến máy chủ.

Có ai biết khi nào onServiceConnected() được gọi chính xác hoặc có thể chờ đợi điều gì không?
Hoặc có thể một cái gì đó khác để khắc phục vấn đề này?

EDIT:bindService trả về false, điều gì có thể gây ra điều này?

Cảm ơn trước

+0

'bindService' phải trả về' false' nếu bạn muốn 'onRebind' được gọi sau lần liên kết đầu tiên. – farukdgn

Trả lời

24

Sau một số nghiên cứu khác, tôi phát hiện ra đây là sự cố đã biết trong Android.

Hoạt động thứ hai mà tôi đã nói đến là một hoạt động được sử dụng làm nội dung trong một TabActivity.

Cách để sửa lỗi này là để gọi bindService(...) vào bối cảnh ứng dụng, thay vì vào bối cảnh hoạt động sử dụng getApplicationContext().bindService(...)

+2

Xin chào, tôi có cùng một vấn đề. Bạn có thể giải thích các biện pháp khắc phục nhiều hơn một chút? Nếu có thể, bạn có thể xem mã của tôi ở đây và cho tôi biết những gì nên được thay đổi? Cảm ơn bạn rất nhiều. Lỗi này khiến tôi phát điên trong một ngày. Mã của tôi: http://ideone.com/cV5BJa –

+0

Bạn có thể giải thích cho tôi tại sao chúng ta cần sử dụng getApplicationContext(). BindService không bindService? bindService hoạt động trong một hoạt động của tôi nhưng không hoạt động trong hoạt động khác của tôi (getApplicationContext(). BindService hoạt động). Nó thật lạ. – Thinsky

+0

Cảm ơn bạn rất nhiều !! Đây là chính xác những gì tôi đã phải đối mặt và nó làm cho rất nhiều ý nghĩa để sử dụng bối cảnh ứng dụng chứ không phải là bối cảnh hoạt động. Nó giải quyết vấn đề của tôi! Cảm ơn người đàn ông !! – Sjd

8

Thêm ràng buộc trong manifest ..

<service 
      android:name=".MyAccessibilityService" 
      android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" > 
      <intent-filter> 
       <action android:name="android.accessibilityservice.AccessibilityService" /> 
      </intent-filter> 

</service> 

MyAccessibilityService tên dịch vụ của bạn.

16

Bạn cần phải thêm:

<service android:name="package.path.to.your.service.class" android:enabled="true"></service>

trong file manifest Android.

+2

cho tôi, nó không cần. Lớp –

+1

là rất rất nhập khẩu thêm gói + tên trong manifest package.path.to.your.service.class –

1

Đây là những gì làm việc cho tôi

Thay vì

public IBinder onBind(Intent intent) { 
    return null; 
} 

tôi đã sử dụng

public IBinder onBind(Intent intent) { 
    return mMessenger.getBinder(); 
} 
+0

Nó thậm chí làm việc với một Binder mới() nếu bạn không cần một triển khai cụ thể – DrinkBird

5

Nó xảy ra với tôi ngay bây giờ.
Đừng quên khởi tạo lớp học của bạn trước khi trở về onbind. Sai lầm ngớ ngẩn, nhưng điều đó xảy ra. hy vọng điều này sẽ giúp ai đó trong tương lai.

private YourBinder thisBinder; 

oncreate 
{ 
thisBinder = new YourBinder(); <--dont forget this. 
} 


public class YourBinder extends Binder 
{ 

} 

public IBinder onBind(Intent intent) 
{ 
return thisBinder; 
} 
0

Tôi đã xmarian và gặp vấn đề tương tự và sau đó thấy rằng tôi chưa cung cấp tên riêng cho dịch vụ đó. Vì vậy, tên dịch vụ nên được đặt tên thuộc tính. Mà tôi cho rằng trình biên dịch xmarian làm điều tương tự làm cho mục nhập đó trong Android XML.

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