2011-11-04 52 views
1

我寫了一個Android應用程序,捕獲所有TouchEvents(例如DOWN,UP,MOVE ..)並將其轉儲到日誌文件中。Android觸摸事件會被濾除?

應用正常工作與真實人體觸摸,以每秒1-> 5觸摸的速度。但是,當我使用以每秒100-> 500次左右的速度運行的機械觸摸發生器時,日誌文件顯示的觸摸次數比實際生成的次數少。

看着記錄在與每個觸摸事件的時間戳日誌文件中的接觸後,我發現事件的一個很奇怪的圖案由應用程序捕獲。總是有2個連續的事件相距2毫秒,接下來是大約50毫秒後的另一個事件。

例如: 第一事件發生時在第十毫秒

第二事件發生在12毫秒,這是後2毫秒第一

第三事件發生在第62毫秒,這是第一個之後50毫秒

第四事件發生在第64毫秒,這是2毫秒的第一

然後下一個事件發生在第104個毫秒...然後106噸後^ h ...等等

找遍周圍大約有沒有運氣的問題。不過,我發現Android允許雙擊,但不允許超過2次連續觸摸。這意味着你可以有兩個連續的觸摸非常接近對方,但不超過2.我的猜測是屏幕驅動程序禁用第3,第4 ....觸摸即使一段時間(非常可能50毫秒),直到它允許下一個事件再次發生。這樣做的原因是假設人類不能觸及得太快,並且應該禁用這種觸摸並將其視爲錯誤/噪聲。
注意,這是多點觸控不同,因爲我說的是連續的事件發生在不同的時間點(即使那些非常接近),以非常快的速度,而不是多點觸摸事件在多點觸控同一時間發生。

我想問一下,如果任何一個知道爲什麼會有這樣的過濾機制?以及如何在完全可能的情況下禁用它們?我的目標是試圖以儘可能高的速度記錄儘可能多的觸摸事件。

我真的很感激,如果任何人能確認/ fasify我的假設,或者幫助我去周圍的Android應用過濾器。

非常感謝閱讀一路這一點:)。

+0

Android的過程觸摸事件一樣,因爲它可以在UI線程上做額外的工作。這個機械時間發生器是什麼?從來沒有聽說過。你所觀察到的與時間分割有什麼關係?記住,UI線程必須與其他線程共享的CPU,你的流程只是衆多之一。 –

+0

我的機械觸摸發生器只是一個帶有電容錘的旋轉輪,以高速點擊屏幕。當我有5個錘子在輪子上並以每秒100轉的速度旋轉輪子時,它會產生每秒500次觸摸。 您能否解釋更多關於設備可以執行的處理事件的限制? 順便說一下,我正在測試三星10.1 Galaxy Tab,如果有幫助。 – Callitaday

回答

0

我不知道,如果你找到了一個解決方案呢,不過我最近遇到了同樣的事情。我將堆棧跟蹤信息打印到Logcat中,指出太多線程正在訪問相同的日誌文件(這很有意義,因爲每次寫入文件時都會自動在新線程上運行它)。我的解決辦法是簡單地把所有的登錄到幾百個字符串數組,當陣列達到其最大尺寸,使用StringBuilder所有日誌附加和他們(一個線程)寫信給我的文件。這解決了我所有的問題。