Menerapkan wait() dan notify() antara beberapa koneksi sensor

Di aplikasi Android saya, saya ingin terhubung ke beberapa sensor dengan satu tombol OnClickListener. Namun, ia perlu mengambil setiap sensor pada satu waktu hingga koneksi terjalin sebelum melanjutkan ke sensor berikutnya.

onSensorConnected dipanggil ketika sensor berhasil terhubung. Namun, saat ini ia mencoba menyambung ke sensor berikutnya sebelum onSensorConnected dipanggil.

Oleh karena itu, saya mencoba menerapkan wait() ketika sensor terhubung (onConnectSensors) dan notify() ketika koneksi telah dibuat (onSensorConnected). Ini akan memungkinkan sensor berikutnya melewati proses yang sama.

Namun, sensor masih terhubung sebelum sinyal notify di onSensorConnected. Saya memerlukan panduan tentang cara menggunakan wait dan 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 sumber
comment
Saya tidak dapat melihat konkurensi apa pun dalam kode Anda, hanya beberapa wait(), notify() dan synchronized tetapi tidak ada utas lainnya?... Tampaknya bagian terpenting hilang di sini. Mohon klarifikasi itu   -  person Lino    schedule 15.09.2020
comment
Maksud saya adalah saya tidak melihat thread lain, mis. Anda memanggil semua sensor secara berurutan dalam satu thread. Dan jika setiap sensor memanggil onSensorConnected setelah selesai, maka jelas bahwa sensor lainnya belum diinisialisasi (karena Anda tidak memanggil semuanya sekaligus). Jadi, Anda sebaiknya menghapus panggilan wait() dan notify() ini sepenuhnya dan memanggil onSensorConnected dalam metode onClick Anda   -  person Lino    schedule 15.09.2020
comment
Maaf jika pertanyaan dan kode saya kurang jelas. Sebenarnya saya perlu terhubung ke setiap sensor satu per satu dan menunggu onSensorConnected() di antara setiap koneksi. Saat ini semua sensor terhubung terlalu cepat sebelum onSensorConnected() dijangkau untuk setiap sensor. Saya akan mencoba memperjelas pertanyaan dan kodenya, terima kasih.   -  person Frederik Petri    schedule 15.09.2020
comment
Mengapa? Jika API mengizinkan koneksi dilakukan secara bersamaan, mengapa Anda ingin menggantinya?   -  person user207421    schedule 15.09.2020
comment
Saya rasa ini membebani protokol bluetooth secara berlebihan. Hanya beberapa sensor yang terhubung dan ada pula yang baru mulai terhubung tetapi tidak pernah terhubung sepenuhnya. Namun, ketika saya mengklik secara manual satu sensor pada satu waktu dan menunggu 'onSensorConnected', sensor itu berfungsi. Sekarang saya hanya ingin mengotomatiskan proses itu   -  person Frederik Petri    schedule 16.09.2020