Hallo,
es geht um den Sample-Code bei
http://www.mikrocontroller.net/attachment/93725/SampleSPPClient.java
Ich weiß nicht, zu welchen Thread der Code gehört, den Link hat mir
Gugel ausgespuckt.
Der Code funktioniert zwar wunderbar, aber eine Stelle kommt mir komisch
vor.
Es geht um den Object.wait() / Object.notify() Mechanismus.
Zuerst werden alle BT-Devices gesucht und das Hauptprogramm angehalten.
1 | agent.startInquiry(DiscoveryAgent.GIAC, client);
|
2 | synchronized(lock) {
|
3 | lock.wait();
|
4 | }
|
Wenn die Suche beendet ist, wird in der vom DiscoveryListener
bereitgestellten Funktion das Hauptprogramm wieder losgefahren.
1 | public void inquiryCompleted(int discType) {
|
2 | synchronized(lock){
|
3 | lock.notify();
|
4 | }
|
5 | }
|
Das gleiche Spiel wird bei der Suche der Services des ausgewählten
BT-Device gemacht: Hauptprogramm angehalten, bei Beendigung der Suche
wieder fortgesetzt.
Allerdings wird in 2 Callbacks lock.notify() aufgerufen:
servicesDiscovered() und serviceSearchCompleted().
D.h. schon beim ersten gefundenen Service läuft das Hauptprogramm
weiter.
Ich habe den lock.notify() in der servicesDiscovered() herausgenommen,
dann funktioniert das Sample-Programm auch.
Was ist die richtige/bessere Version?
Ich kann mir vorstellen, dass manche Treiber serviceSearchCompleted()
gar nicht aufrufen, dann bliebe das Hauptprogramm stecken. Vielleicht
hat man sicherheitshalber ein überflüssiges lock.notify() angefügt!?