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

use*_*372 5 service android

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

  1. 在应用程序中注册服务
  2. 使用LocalBinder从应用程序连接到服务.

解决方案1

应用程序:

public class MyApplication extends Application {

    MyService myService;

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

    public void testCallService(){
        myService.sendResponseApdu("test".getBytes());
    }
}
Run Code Online (Sandbox Code Playgroud)

和服务:

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) {

    }
}
Run Code Online (Sandbox Code Playgroud)

要调用该服务,应用程序将使用对服务的引用.该服务是一项本地服务.(不是远程服务)这种方法是否适用于所有情况?

解决方案2

使用带有ServiceConnection的LocalService方法绑定到服务符合http://developer.android.com/reference/android/app/Service.html#LocalServiceSample上的示例

解决方案2将起作用.示例1也会起作用吗?与解决方案2相比,解决方案1的(dis)优势是什么?

pra*_*tsJ 2

根据 Android 官方文档,服务旨在在后台执行长时间运行的操作,如果服务和活动之间存在大量交互,他们建议使用绑定服务。使用绑定服务的原因是Binding具有丰富的通信接口的优势。

/sf/answers/354633121/

我正在开发一个类似的应用程序,出于同样的原因,我选择了绑定服务,通过接口从活动到服务进行通信,并使用 Localbroadcastreceiver 从服务到活动进行事件通信。