Tôi có lớp thử nghiệm này để thử nghiệm một dịch vụ từ xa:Android dịch vụ không đưa ra bởi kiểm tra JUnit
public class CoreServiceBasicTest extends ServiceTestCase<CoreService> implements ServiceConnection {
/** Tag for logging */
private final static String TAG = CoreServiceBasicTest.class.getName();
/** Receive incoming messages */
private final Messenger inMessenger = new Messenger(new IncomingHandler());
/** Communicate with the service */
private Messenger outMessenger = null;
/** Handler of incoming messages from service */
private static class IncomingHandler extends Handler {
@Override
public void handleMessage(Message msg) {
Log.d(TAG, "Incoming message");
}
}
/** Constructor for service test */
public CoreServiceBasicTest() {
super(CoreService.class);
}
/** Start the service */
@Override
public void setUp() {
// Mandatory
try {
super.setUp();
} catch (Exception e) {
e.printStackTrace();
}
// Start the service
Intent service = new Intent();
service.setClass(this.getContext(), CoreService.class);
startService(service);
Log.d(TAG, "Service started");
}
public void onServiceConnected(ComponentName className, IBinder service) {
outMessenger = new Messenger(service);
Log.d(TAG, "Service attached");
}
public void onServiceDisconnected(ComponentName className) {
// TODO Auto-generated method stub
}
@SmallTest
public void testBindService() {
// Bind to the service
Intent service = new Intent();
service.setClass(getContext(), CoreService.class);
boolean isBound = getContext().bindService(service, this, Context.BIND_AUTO_CREATE);
assertTrue(isBound);
}
}
Vấn đề là startService (dịch vụ) trong phương pháp thiết lập() không khởi động dịch vụ một cách chính xác. Đây là những gì AVD cho thấy:
Như bạn thấy, quá trình này được đưa ra nhưng dịch vụ thì không. Sau đó, trên testBindService()
, assertTrue(isBound)
không thành công.
này không xảy ra nếu tôi khởi động dịch vụ từ một Hoạt động:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Start the Core service
Intent service = new Intent();
service.setClass(this, CoreService.class);
if (startService(service) == null) {
Toast.makeText(this, "Error starting service!", Toast.LENGTH_LONG).show();
Log.e(TAG, "Error starting service");
} else {
Toast.makeText(this, "Service started sucessfully", Toast.LENGTH_LONG).show();
}
// Die
finish();
}
Đây là dịch vụ được bắt đầu một cách chính xác, như hình dưới đây.
Làm thế nào tôi có thể bắt đầu và liên kết với một dịch vụ từ xa sử dụng Messenger để giao tiếp với các hoạt động từ một dự án Android thử nghiệm?
Vui lòng thực hiện các kiểm tra này trước để đảm bảo vấn đề chính của nó không phải là một cái gì đó cú pháp đầu tiên Đảm bảo tệp kê khai của bạn có số này là ' ' và được lồng vào giữa thẻ ứng dụng như vậy ' application> ' Ngoài ra hãy đảm bảo rằng tất cả các phụ thuộc của dự án được ánh xạ chính xác Đồng thời kiểm tra xem coreservice.java của bạn có nằm trong cùng một gói hay không hoặc gói khác là hoạt động- đảm bảo bạn có tên gói ngay trong tệp kê khai. –
Slartibartfast
Như tôi đã nói: * "Điều này không xảy ra nếu tôi khởi chạy dịch vụ từ một Hoạt động" *, vì vậy rõ ràng là Manifest là chính xác. Cũng như bạn có thể thấy không có lỗi "Dịch vụ không tìm thấy", nhưng quá trình được khởi chạy nhưng không có dịch vụ nào được đính kèm? Đây là những gì tôi thấy lạ. – m0skit0