Реализация wait() и notify() между подключениями нескольких датчиков

В моем приложении для Android я хотел бы подключиться к нескольким датчикам с помощью одной кнопки OnClickListener. Тем не менее, он должен принимать каждый датчик за раз, пока соединение не будет установлено, прежде чем переходить к следующему.

onSensorConnected вызывается при успешном подключении датчика. Однако прямо сейчас он пытается подключиться к следующему датчику до вызова onSensorConnected.

Поэтому я попытался реализовать wait() при подключении датчика (onConnectSensors) и notify() при установленном соединении (onSensorConnected). Это должно позволить следующему датчику пройти тот же процесс.

Однако датчики по-прежнему подключаются до сигнала notify в onSensorConnected. Мне нужно руководство по использованию wait и notify.

public class myFragment extends Fragment {

    Button connect;
    
    private Boolean sensorConnected = false;
    private final Object lock = new Object();

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        ViewGroup root = (ViewGroup) inflater.inflate(R.layout.myLayout, container,false);

        connect = (Button)root.findViewById(R.id.connectBtn);
        connect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onConnectSensors(0); // Connect sensor one at a time..
                onConnectSensors(1);
                onConnectSensors(2);
                onConnectSensors(3);
                onConnectSensors(4);
                onConnectSensors(5);
                onConnectSensors(6);
                onConnectSensors(7);
                onConnectSensors(8);
                onConnectSensors(9);
            }
        });

        return root;
    }

    // Position is the sensor position in a recyclerview
    public void onConnectSensors(int position) {

        BluetoothDevice device = mScanAdapter.getDevice(position);
        mSensorViewModel.connectSensor(getContext(), device);
        // Sensor is now establishing connnection...

        // Wait until recieving sensorConnected = true
        try {
            synchronized (lock) {
                while ( sensorConnected != true ) { // Wait until sensorConnected is true
                    lock.wait();
                }
                sensorConnected = false; // reset status for next sensor
            }
        } catch ( InterruptedException x ) {}
    }

    @Override
    public void onSensorConnected() { // This is called automatically when sensor is finishing connection

        synchronized ( lock ) {
            sensorConnected = true;
            lock.notify();
        }
    }
}

person Frederik Petri    schedule 15.09.2020    source источник
comment
Я не вижу никакого параллелизма в вашем коде, только некоторые wait(), notify() и synchronized, но никаких других потоков?... Кажется, что здесь отсутствует самая важная часть. Пожалуйста, уточните, что   -  person Lino    schedule 15.09.2020
comment
Я имел в виду, что я не вижу никаких других потоков, например. вы вызываете все датчики последовательно в одном потоке. И если каждый из датчиков вызывает этот onSensorConnected после завершения, то ясно, что другие датчики не были инициализированы (потому что вы не вызываете их все сразу). Поэтому вам следует просто полностью удалить эти вызовы wait() и notify() и вызвать onSensorConnected в методе onClick.   -  person Lino    schedule 15.09.2020
comment
Извините, если мой вопрос и код недостаточно ясны. На самом деле мне нужно подключаться к каждому датчику по одному и ждать onSensorConnected() между каждым подключением. Прямо сейчас все датчики подключаются слишком быстро, прежде чем для каждого датчика будет достигнуто onSensorConnected(). Я постараюсь уточнить вопрос и код, спасибо.   -  person Frederik Petri    schedule 15.09.2020
comment
Почему? Если API позволяет одновременным подключениям, почему вы хотите переопределить это?   -  person user207421    schedule 15.09.2020
comment
Я думаю, что это перегружает протокол Bluetooth. Подключено всего несколько датчиков, а некоторые только начинают подключаться, но никогда не подключаются полностью. Однако, когда я вручную щелкаю по одному датчику и жду «onSensorConnected», он работает. Теперь я просто хочу автоматизировать этот процесс   -  person Frederik Petri    schedule 16.09.2020