Лучший способ читать непрерывные потоки данных из сервиса в Android

У меня есть приложение для Android, которое имеет и активность, и сервис. Служба считывает данные датчика Bluetooth от Samsung Galaxy Gear 2. Устройство Galaxy отстреливает данные так быстро, как только получает, но это приводит к невероятной задержке на стороне Android при их получении. Служба состоит из трех строк кода, поэтому она не может быть более эффективной, чем эта. Я думаю, что это, вероятно, код активности, который я написал ниже:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_screen);

    //set global variables
    x = (TextView)findViewById(R.id.xaccel);
    y = (TextView)findViewById(R.id.yaccel);
    z = (TextView)findViewById(R.id.zaccel);

    doBindService(); //Conects to the Service
    Thread myThread = new Thread(myRunnable);
    myThread.start();
}

Runnable myRunnable = new Runnable() {
    @Override
    public void run() {
        while (mIsBound) {
            //check that the global variables have been set
            if (x!=null && y!= null && z != null) {
                x.post(new Runnable() {
                    @Override
                    public void run() {
                        if (HelloAccessoryProviderService.inputMessage != "") {
                             //read the service's global variable "inputMessage" and print it out
                            String mainData = HelloAccessoryProviderService.inputMessage;
                            x.setText("X: " + mainData.substring(0, 6));
                            y.setText("Y: " + mainData.substring(7, 13));
                            z.setText("Z: " + mainData.substring(14, 20));
                        }
                    };
                });
            }
        }
    }
};

Я читал, что runnables были лучшим способом чтения непрерывных данных, но если есть другие способы, это было бы здорово. Заранее спасибо!

1 ответ

Вы можете сделать так, чтобы служба предоставляла интерфейс прослушивателя для реализации класса активности, а затем служба может общаться с действием (установите ссылку служб на вашу активность как слушателя, с которой вы связываете / отменяете привязку при приостановке / возобновлении активности через вспомогательный класс), или вы можете зарегистрировать сервис на шине и публиковать сообщения, где активность будет также регистрироваться на шине в качестве подписчика этих сообщений. Оттоба представляет собой простую и удобную вставку: http://square.github.io/otto/..

Другие вопросы по тегам