Лучший способ читать непрерывные потоки данных из сервиса в 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/..