ในแอป 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();
}
}
}
wait()
,notify()
และsynchronized
แต่ไม่มีเธรดอื่นใช่ไหม... ดูเหมือนว่าส่วนที่สำคัญที่สุดจะหายไปที่นี่ กรุณาชี้แจงว่า - person Lino   schedule 15.09.2020onSensorConnected
หลังจากเสร็จสิ้น ก็ชัดเจนว่าเซ็นเซอร์ตัวอื่นๆ ยังไม่ได้เริ่มต้นใช้งาน (เพราะคุณไม่ได้เรียกใช้เซ็นเซอร์ทั้งหมดพร้อมกัน) ดังนั้นคุณควรลบการเรียกwait()
และnotify()
เหล่านี้ออกทั้งหมดแล้วโทรonSensorConnected
ในเมธอดonClick
ของคุณ - person Lino   schedule 15.09.2020