从服务中的侦听器接收数据

时间:2014-12-19 19:48:21

标签: android service listener

我正在寻找一种快速的方法来从我的服务中的侦听器获取数据到活动。

我尝试使用变量来存储当前值并在活动中读取它,但这很慢!

我从一项活动开始我的服务。我读到,可以独立于某个活动启动服务,并将活动绑定到此服务。这可能是一种洗脱吗?它看起来怎么样?

以下是我服务的一部分:

公共类DataService扩展了Service {

private VehicleManager mVehicleManager;

public int onStartCommand(Intent intent, int flags, int startId) {
    context = getApplicationContext();
    Intent intent1 = new Intent(this, VehicleManager.class);
    bindService(intent1, mConnection, Context.BIND_AUTO_CREATE);

    startThreadUpdatingDatabase();
    return Service.START_NOT_STICKY;
}

public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

private ServiceConnection mConnection = new ServiceConnection() {

    public void onServiceConnected(ComponentName className, IBinder service) {
        mVehicleManager = ((VehicleBinder) service).getService();

        mVehicleManager.addListener(EngineSpeed.class, engineSpeedListener);
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        // TODO Auto-generated method stub

    }
};

EngineSpeed.Listener engineSpeedListener = new EngineSpeed.Listener() {
    public void receive(Measurement measurement) {

        final EngineSpeed data = (EngineSpeed) measurement;

        new Thread(new Runnable() {
            public void run() {
                Double engineSpeedValue = data.getValue().doubleValue();//i want this value using in an activity!!
            }
        }).start();

    }
};

}

1 个答案:

答案 0 :(得分:1)

这不是最好的方法,但试试这个:

在您的活动中添加更新(双倍价值)方法。 启动时将上下文传递给您的服务,并在以下后添加:

Double engineSpeedValue = data.getValue().doubleValue(); // I want this value used in an activity!!
(YourAcitvityName) context).update(engineSpeedValue);