2014-09-16 21 views
5

Tôi muốn liên lạc từ Ứng dụng Android của mình với Dịch vụ Android của mình. Tôi đã hai lựa chọn nhưng tôi không biết nên chọn:Giao tiếp từ Đơn đăng ký đến Dịch vụ

  1. Đăng ký dịch vụ với các ứng dụng
  2. Sử dụng LocalBinder để kết nối từ ứng dụng đến dịch vụ.

Giải pháp 1

Việc áp dụng:

public class MyApplication extends Application { 

    MyService myService; 

    public void setMyService(MyService myService) { 
     this.myService = myService; 
    } 

    public void testCallService(){ 
     myService.sendResponseApdu("test".getBytes()); 
    } 
} 

và dịch vụ:

public class MyService extends HostApduService { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     ((MyApplication)getApplication()).setMyService(this); 
    } 

    @Override 
    public byte[] processCommandApdu(byte[] commandApdu, Bundle extras) { 
     return new byte[0]; 
    } 

    @Override 
    public void onDeactivated(int reason) { 

    } 
} 

Để gọi các dịch vụ ứng dụng sử dụng các tham chiếu đến các dịch vụ. Dịch vụ là một dịch vụ địa phương. (không phải là một dịch vụ từ xa) Cách tiếp cận này có hiệu quả trong mọi hoàn cảnh không?

Giải pháp 2

Sử dụng cách tiếp cận LocalService với một ServiceConnection liên kết với các dịch vụ phù hợp với ví dụ trên http://developer.android.com/reference/android/app/Service.html#LocalServiceSample

Giải pháp 2 sẽ làm việc. Ví dụ 1 có hoạt động không? Lợi thế (dis) của giải pháp 1 so với giải pháp 2 là gì?

+1

Tại sao bạn mở rộng 'Ứng dụng' cho điều này? Nó không thực sự là một cách tiếp cận thiết kế tốt để giao tiếp với một 'Dịch vụ'. – Squonk

+0

Chúng tôi mở rộng Ứng dụng để thực hiện khởi chạy một lần và giữ tham chiếu đến phiên. – userM1433372

Trả lời

2

Theo tài liệu android chính thức, dịch vụ có nghĩa là để thực hiện các hoạt động chạy dài trong nền và nếu có một lượng đáng kể tương tác giữa dịch vụ và hoạt động, họ khuyên bạn nên sử dụng các dịch vụ bị ràng buộc. Lý do sử dụng các dịch vụ bị ràng buộc là Binding có lợi thế về giao diện phong phú để giao tiếp.

https://stackoverflow.com/a/5066187/2839624

Tôi đã làm việc trên một ứng dụng tương tự mà tôi đã chọn các dịch vụ ràng buộc với lý do tương tự với thông tin liên lạc từ hoạt động để phục vụ thông qua giao diện và giao tiếp sự kiện từ dịch vụ cho hoạt động sử dụng Localbroadcastreceiver.

0

Cách tiếp cận thứ hai có vẻ tốt nhất đối với tôi vì khớp nối đầu tiên có trọng lượng thấp hơn.

0

Sử dụng chất kết dính hoặc nói AIDLS trong trường hợp liên lạc quá trình liên tục luôn được ưu tiên, sau đó sử dụng thông qua tham chiếu, Trong trường hợp rò rỉ hoặc tham chiếu chết, ứng dụng của bạn sẽ phát triển.

+0

Trong trường hợp nào thì giải pháp 1 sẽ gây ra các tham chiếu chết? – userM1433372

0

Nếu bạn muốn sử dụng đầy đủ tách có thể sử dụng máy thu phát sóng

0

Nếu dịch vụ của bạn là địa phương để ứng dụng của bạn sau đó (đơn giản hơn và sạch hơn) Cách tốt nhất để làm điều đó là sử dụng một LocalBroadcastManager http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html Bằng cách đó bạn có thể vượt qua bất kỳ loại đối tượng giữa các hoạt động/phân đoạn/dịch vụ mà không phải lo lắng về bảo mật cũng như sự phức tạp của mã của bạn. Nó giúp bạn giữ cho mã của bạn gọn gàng và bảo trì khá dễ dàng hơn.

Hy vọng điều đó sẽ hữu ích.

0

Nó cung cấp một cách dễ dàng để giao tiếp với dịch vụ:

1) Thực hiện riêng Android Dịch vụ nền của bạn

2) Bắt đầu và dừng dịch vụ từ một hoạt động, ví dụ:UI

3) Gửi/nhận tin nhắn bằng các dịch vụ

4) Gửi/nhận tin nhắn bằng các Hoạt động

follwing liên kết có thể giúp bạn http://blog.philippheckel.com/2012/06/10/android-example-communication-between-activity-and-service-using-messaging/

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