2010-11-13 20 views
1

我正在做一個應用程序,它將同時使用touchevents和sensorevents。觸發事件的問題在於它們經常觸發,從而消耗大量的CPU時間。常見的解決方案是做一個Thread.sleep讓它變冷靜下來。睡在onTouchEvent塊onSensorChanged

但是,如果想在同一活動中同時使用onTouchEvent和onSensorChanged,則應用Thread.sleep hack也會減慢onSensorChanged。這顯然是由同一個(ui)線程調用的兩個方法造成的。

是否有某種方法可以從不同於ui的線程調用onTouchEvent,因此可以在不減慢onSensorChanged的情況下執行Thread.sleep技巧?

回答

0

「常見的解決方案是做一個Thread.sleep使其冷卻下來。」

你從哪裏聽到的?睡在主線程(也稱爲EDT - 事件調度線程)是不可接受的。 Android正在重畫屏幕並在此線程上執行各種任務。睡覺它可以使它沒有反應,恕我直言,這是一個不好的做法。

如果onTouchEvent()過於頻繁地觸發,那麼只需在代碼中對它們進行過濾=如果自上次事件後至少有X個時間未過去,則不執行任何操作。

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

// inside your onTouchEvent handler 
if(System.getCurrentTimeMillis() - lastTime < XXX) 
    return; 
lastTime = System.getCurrentTimeMillis(); 
+1

謝謝,但它似乎並不是發生在onTouchEvent內部會減慢速度,而是它被調用。即使有一個空的onTouchEvent,onSensorChanged也有明顯的延遲。 – MrJohs 2010-11-13 10:11:55

+0

不幸的是,人們無法控制Android觸發了多少事件。 – 2010-11-13 10:29:36