2017-07-06 95 views
8

我的目標是使用工具測試(AndroidJUnitRunner)爲Android CPU密集型代碼編寫自動性能測試。使用Android儀器測試測量性能

我很驚訝地發現,測試結果是不可靠的,模擬CPU密集型代碼,我想測試一下,我寫了下面的循環

for(int i=0;i<1000000;i++){ 
    Math.pow(2,i); 
} 

的代碼進行了測試作爲一種工具測試Android應用

內我得到的結果如下:

純試驗表明〜230ms,以完成循環 而相同的裝置(G5)上的相同的代碼把〜600毫秒

我歡迎任何線索,爲什麼對AndroidJUnitRunner同一代碼的執行需要較少的三倍的時間比在實際設備上,而兩者最終都在同一臺設備

+0

也許AndroidJUnitRunner比在你的應用程序 – MatPag

+0

這引出了一個問題的代碼更優先,有沒有在應用程序代碼是我認爲它在主線程上執行任何的可能性來設定具體的代碼更優先 –

+0

無論如何,最高優先級 –

回答

5

簡單的速度來自CPU上執行,而你正在執行一些代碼,如果CPU沒有做任何繁重的工作並且所有的CPU核心都運行起來,它會很快地執行你的代碼。在android中,'UI渲染'是AndroidJUnitRunner沒有做的最密集的工作,這就是爲什麼它很快。

如果你想了解的Android在不同的場景中進行,看看這個:https://www.youtube.com/playlist?list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE

1

我認爲對於在結果差異的原因是,該設備需要做的工作的區別與測試平行。 (開銷)。

我建議您嘗試使用比AndroidJUnitRunner開銷更大的測試框架。你可以試試Robotium

+0

謝謝,會嘗試,好點 –