Spí v onTouchEvent blocích onSensorChanged

hlasů
1

Dělám aplikaci, která bude využívat jak touchevents a sensorevents. Problém s touchevents je, že vypálit velice často, a tím spotřebovává obrovské množství času procesoru. Společná řešení je provést Thread.sleep aby ho vychladnout.

Nicméně, pokud někdo chce použít jak onTouchEvent a onSensorChanged ve stejnou činnost, uplatnění Thread.sleep hack bude také zpomalit onSensorChanged. To je zřejmě způsobeno dvěma způsoby volána z téhož (UI) závit.

Existuje nějaký způsob, jak volat onTouchEvent z různých nití než ui, takže by se dalo dělat Thread.sleep trik bez zpomalení onSensorChanged stejně?

Položena 13/11/2010 v 10:47
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

„Společná řešení je provést Thread.sleep aby ho vychladnout.“

Kde jsi to slyšel? Spí na hlavním závitem (nazývané také EDT - událost dispečink závit) je nepřijatelný. Android je překreslování obrazovky a dělat všechny druhy úkolů na toto vlákno. Spací to může dělat to přestane reagovat a je IMHO špatná praxe.

Pokud onTouchEvent) střílejí příliš často (v té době jednoduše filtraci je v kódu = dělat nic, pokud alespoň množství X z doby neprošel od poslední události.

long lastTime = 0; // field in you class holding event handler

// inside your onTouchEvent handler
if(System.getCurrentTimeMillis() - lastTime < XXX)
    return;
 lastTime = System.getCurrentTimeMillis();
Odpovězeno 13/11/2010 v 11:05
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more