Broadcast Receiver со временем начинает тормозить. Есть ли другие варианты в моем коде? - PullRequest
0 голосов
/ 24 декабря 2018

Добрый день, разработчики! Я создаю проект для своей диссертации.И у меня есть проблема при отправке данных из сервисов в активность в 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 для построения графика.

Я надеюсь, что это может решить мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...