Tôi hiện đang có một Dịch vụ chạy tốt khi tôi khởi động nó nhưng khi tôi cố dừng dịch vụ bằng phương thức stopService phương thức onDestroy của nó không được gọi.Dịch vụ sẽ không dừng khi phương thức StopService được gọi là
Đây là mã tôi sử dụng để cố gắng ngăn chặn các dịch vụ
stop_Scan_Button = (Button) findViewById (R.id.stopScanButton);
stop_Scan_Button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Log.d("DEBUGSERVICE", "Stop Button pressed");
Intent service = new Intent(CiceroEngine. CICERO_SERVICE);
releaseBind();
Log.d("Stop_Scan_Button", "Service: " + service.toString());
stopService(service);
Log.d("Stop_Scan_Button", "Service should stop! ");
}
});
Tôi có nghĩ rằng khi sử dụng stopService thì phương thức onDestroy của Dịch vụ có được không? Khi tôi bấm nút dừng quét, phương pháp onDestroy()
trong Dịch vụ của tôi không được gọi.
Có bất kỳ điều gì khác mà tôi thiếu mà tôi nên đưa vào để ngừng dịch vụ không?
EDIT: để thêm onServiceConnected()
được gọi khi stopService chạy thay vì onServiceDisconnected()
, tại sao điều đó lại xảy ra?
EDIT: Để thêm biết thêm coi Binding
tôi gọi bindService trong onCreate() phương pháp và sau đó tôi có phương pháp releaseBind() unbind Dịch vụ.
Đây là mã cho phương pháp đó:
public void releaseBind(){
unbindService(this);
}
Vì vậy, tôi đoán rằng unbinding không phải là vấn đề của tôi?
Tôi đã chỉnh sửa câu hỏi ban đầu của tôi để bao gồm thông tin về liên kết của tôi, tôi có nó ràng buộc và sau đó unbinding –
Ummm, mã đó là hoàn toàn sai lầm và là gần như chắc chắn góp phần vào vấn đề của bạn. 'bindService()' và 'unbindService()' là không đồng bộ và được bảo đảm thất bại theo cách bạn đang sử dụng chúng. Thật không may, tôi không có ý tưởng những gì bạn đang cố gắng để thực hiện ở đây, vì vậy tôi không có cách nào tốt để tư vấn cho bạn thêm. – CommonsWare
Giao diện người dùng của nó chỉ là một nút hai nút, một để bắt đầu dịch vụ và một để ngăn chặn nó. Tôi đã lấy câu lệnh if ra khỏi phương thức releaseBind() của tôi để lại chỉ unBindService (điều này); Điều này dường như hủy đăng ký Dịch vụ khi tôi nhấp vào Dịch vụ lần thứ hai tôi gặp lỗi "Dịch vụ chưa được đăng ký". Tuy nhiên, stopService vẫn không xuất hiện để gọi phương thức onDestroy() trong Dịch vụ của tôi, các dịch vụ nền vẫn hoạt động –