Добрый день, разработчики! Я создаю проект для своей диссертации.И у меня есть проблема при отправке данных из сервисов в активность в Android.Я использую / регистрирую Внутренний датчик, такой как Акселерометр и Ориентация в Сервисах, и отправляю данные в Activity.Коммуникация в порядке, но когда я отображаю данные на графике с акселерометра в Activity, это делает их запаздывающими.Я использую широковещательный приемник как средство коммуникации между Сервисами и Активностью.Как я могу решить эту проблему о медленном приложении.
Я пытался поместить данные в TextView
, и они в хорошем состоянии, но я не хочу отображать их на графике.Я пробовал также использовать Handler
и Thread
, но я не знаю, как его использовать.Я также пытался зарегистрировать датчики в Activity, и он в хорошем состоянии, но когда я использую его для регистрации в Сервисах, это не так.
Вот мой код в Сервисах:
public class Background extends Service implements SensorEventListener{
private SensorManager mSensorManager;
private Intent = i;
...
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
i = new Intent();
mSensorManager = (SensorManager) getSystemService(Activity.SENSOR_SERVICE);
mSensorManager.registerListener(this,mSensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0), SensorManager.SENSOR_DELAY_GAME);
mSensorManager.registerListener(this,mSensorManager.getSensorList(Sensor.TYPE_ORIENTATION).get(0), SensorManager.SENSOR_DELAY_GAME);
....
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
if(sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
i.putExtra("valueX",String.valueOf(sensorEvent.values[0]));
i.putExtra("valueY",String.valueOf(sensorEvent.values[1]));
i.putExtra("valueZ",String.valueOf(sensorEvent.values[2]));
i.setAction("FILTER");
}else if(sensorEvent.sensor.getType() == Sensor.TYPE_ORIENTATION){
i.putExtra("compass",String.valueOf(sensorEvent.values[0]));
}
sendBroadcast(i);
}
}
Вот мой код в приемнике Activity with Broadcast.
public class RealTime extends Fragment {
BroadcastReceiver br;
...
@Override
public void onResume() {
super.onResume();
if(br == null) {
br = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
float x = Float.parseFloat(intent.getExtras().get("valueX").toString());
float y = Float.parseFloat(intent.getExtras().get("valueY").toString());
float z = Float.parseFloat(intent.getExtras().get("valueZ").toString());
displayRawDataGraph(x,y,z);
}
};
}
IntentFilter filt = new IntentFilter("FILTER");
getActivity().registerReceiver(br, filt);
}
Я ожидаю, что выходной график будет гладким, как мыло, но он станет лагированным.
Я использую библиотеку MPAndroidChart
изGitHub для построения графика.
Я надеюсь, что это может решить мою проблему.