从应用程序到服务进行通信

时间:2014-09-16 08:27:49

标签: android service

我想从我的Android应用程序与我的Android服务进行通信。我有两个选择,但我不知道选择哪个:

  1. 使用应用程序注册服务
  2. 使用LocalBinder从应用程序连接到服务。
  3. 解决方案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)优势是什么?

6 个答案:

答案 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/