我想从我的Android应用程序与我的Android服务进行通信。我有两个选择,但我不知道选择哪个:
解决方案1
申请表:
public class MyApplication extends Application {
MyService myService;
public void setMyService(MyService myService) {
this.myService = myService;
}
public void testCallService(){
myService.sendResponseApdu("test".getBytes());
}
}
和服务:
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) {
}
}
要调用该服务,应用程序将使用对服务的引用。 该服务是一项本地服务。 (不是远程服务) 这种方法是否适用于所有情况?
解决方案2
使用LocalService方法与ServiceConnection绑定到服务符合http://developer.android.com/reference/android/app/Service.html#LocalServiceSample上的示例
解决方案2将起作用。示例1也会起作用吗?与溶液2相比,溶液1的(dis)优势是什么?
答案 0 :(得分:2)
根据官方的android文档,服务意味着在后台执行长时间运行的操作,如果服务和活动之间存在大量的交互,他们建议使用绑定的服务。使用绑定服务的原因是Binding具有丰富的通信接口优势。
https://stackoverflow.com/a/5066187/2839624
我正在开发一个类似的应用程序,我选择绑定服务是出于同样的原因,通过接口从活动到服务的通信,以及使用Localbroadcastreceiver将事件从服务传递到活动。
答案 1 :(得分:0)
第二种方法对我来说似乎是最好的,因为第一种方法的结合更为重要。
答案 2 :(得分:0)
使用粘合剂,或者在进程间通信时使用AIDLS作为总是首选,然后通过引用使用它,如果是漏洞或死引用,您的应用程序将会繁荣。
答案 3 :(得分:0)
如果你想要完全去耦,可以使用广播接收器
答案 4 :(得分:0)
如果您的服务是您的应用的本地服务,那么最好(更简单和更干净)的方法是使用LocalBroadcastManager http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html 这样,您可以在活动/片段/服务之间传递任何类型的对象,而不必担心安全性和代码的复杂性。它可以帮助您保持代码精益,并且维护变得更加容易。
希望它有所帮助。
答案 5 :(得分:0)
它提供了一种与服务进行通信的简便方法:
1)实施您自己的Android后台服务
2)从活动开始和停止服务,即UI
3)服务发送/接收消息
4)通过活动发送/接收消息
以下链接可能对您有所帮助 http://blog.philippheckel.com/2012/06/10/android-example-communication-between-activity-and-service-using-messaging/