Sim Master Posted April 26, 2014 Report Posted April 26, 2014 Am creat o aplicatie de android care consta intr-un client si un server. Comunicarea se face prin bluetooth sockets. Totul merge bine, serverul ruleaza in background si asteapta incontinuu conexiuni de la clienti. Problema este ca se descarca bateria prea repede pe telefonul pe care este instalat serverul.Un approach pe care l-am folosit ca sa realizez serverul si care pare sa manance repede din baterie este asta:BluetoothSocket bt_socket = null;BluetoothServerSocket bt_conn = null;try { bt_conn = bt.listenUsingRfcommWithServiceRecord("GEAR_SMS", UUID.fromString(uuid_str)); while (true) { bt_socket = bt_conn.accept(); new Thread(new BtSocket(bt_socket)).start(); }} catch (Exception e) { e.printStackTrace();}In marea parte a timpului serverul este idle si doar asteapta conexiuni, deci consumul ridicat de baterie se poate rezuma doar la bucata asta:while (true) { bt_socket = bt_conn.accept();}Exista alta metoda de a realiza astfel de conexiuni intre client si server, dar fara a consuma bateria? Sau fac eu ceva gresit? Quote
Dark_4ngel Posted April 26, 2014 Report Posted April 26, 2014 pe ce telefon ai testat aplicatia si ce versiune de bluetooth ruleaza ?te intreb pt ca lucrez la un proiect android ce foloseste BLE Divice-uri Quote
Sim Master Posted April 26, 2014 Author Report Posted April 26, 2014 Pe un galaxy note 3 cu bluetooth 4.0 si mi-a mai zis cineva ca are problema asta cu aceeasi aplicatie, dar nu stiu exact ce telefon avea. Quote
nedo Posted April 26, 2014 Report Posted April 26, 2014 Daca e facut in java, dupa ce verifici pui un Thread.sleep(1000);, in felul asta in loc sa consume verifice dupa conexiuni de 10000 ori pe secunda, verifica doar 1 data pe secunda, in felul asta bateria ar trebui sa tina mult mai mult deoarece procesorul/memoria nu sunt utilizate in timpul in care threadul "doarme". In cazul in care nu este java, ci alt limbaj, incearca sa cauti sa vezi daca limbajul respectiv are o functie similara. Quote
Sim Master Posted April 26, 2014 Author Report Posted April 26, 2014 Ar fi o idee, dar faza e ca, la fel ca si la tcp sockets, cand ajunge la linia bt_conn.accept(); sta si asteapta pana se conecteaza un client. Asta inseamna ca in while-ul ala nu vor fi multe iteratii pe secunda, ci poate chiar o singura iteratie pe ora.Si da, e java. Quote
nedo Posted April 26, 2014 Report Posted April 26, 2014 (edited) Incearca sa pui un timeout la Accept.Aici spune ca .Accept poate sa accepte un timer pentru timeout.Sugerez sa folosesti 100 pentru timeout, dupa care chemi Thread.Sleep(900);Teoretic ar trebui sa nu mai consume decat 10% din puterea respectiva.Le. Daca ma gandesc mai bine, cred ca nu e ok cum am spus eu, pentru ca o sa dea Exceptie.while(true){ try { Thread.Sleep(900); bt_socket = bt_conn.accept(100); new Thread(new BtSocket(bt_socket)).start(); } catch (Exception e) { e.printStackTrace(); }} Edited April 26, 2014 by nedo Quote
Sim Master Posted April 26, 2014 Author Report Posted April 26, 2014 Am facut asa si pare ca merge, nu e asa importanta exceptia aia. Acuma ramane sa astept ca sa vad cum se comporta bateria. Quote
nedo Posted April 26, 2014 Report Posted April 26, 2014 Ai verificat daca se fac conexiunile cum trebuie? Verifica, eventual verifica si daca dupa ce creezi o conexiune si o inchizi, serverul raspunde la alte conexiuni. Iar despre exceptie imi faceam griji deoarece ma gandesc ca exista posibilitatea ca atunci cand e apelata exceptia aia, iti inchide serverul, nu am lucrat cu exceptii/trow prea mult si nu stiu exact cum se comporta. De asemenea sugerez sa faci un test ceva ca sa nu printeze mereu aceeasi chestie, pentru ca, daca am citit bine, ar trebui sa iti dea exceptia aia o data pe secunda. Quote
Sim Master Posted April 26, 2014 Author Report Posted April 26, 2014 Da, pare sa mearga bine. Clientul se conecteaza cum trebuie, nici nu se simte delayul ala de 900ms. Exceptia aia nefiind fatala nu opreste programul, doar o arunca si isi continua executia. Quote
nedo Posted April 26, 2014 Report Posted April 26, 2014 Good to hear. Daca mai ai nevoie de ajutor posteaza aici. Quote
Sim Master Posted April 27, 2014 Author Report Posted April 27, 2014 Se pare ca bateria nu se mai descarca chiar atat de repede si e mai bine. Mersi de ajutor. Quote