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();
}
}
}
wait()
,notify()
dansynchronized
tetapi tidak ada utas lainnya?... Tampaknya bagian terpenting hilang di sini. Mohon klarifikasi itu - person Lino   schedule 15.09.2020onSensorConnected
setelah selesai, maka jelas bahwa sensor lainnya belum diinisialisasi (karena Anda tidak memanggil semuanya sekaligus). Jadi, Anda sebaiknya menghapus panggilanwait()
dannotify()
ini sepenuhnya dan memanggilonSensorConnected
dalam metodeonClick
Anda - person Lino   schedule 15.09.2020