sobota, 14 maja 2011

Java: Android i pomiar czasu wykonania kodu

Misją tego bloga jest rozpowszechnianie rozwiązań, których znalezienie, lub opracowanie zajęło mi nieco czasu i przyniosło korzyści. Właściwie to się nie zmieniło. Zdarza mi się co najwyżej rozwiązywać ten sam problem w innym nieco ujęciu. Bardzo duży ruch na blogu generuje wpis o pomiarze czasu w języku Java. Tym razem coś bardzo zbliżonego, bo o pomiarze czasu na platformie Android. Praktycznie nic się nie różni, ale zawsze to wygodna ściągawka.

W przypadku języka Java wystarczyło skorzystać bezpośrednio z klasy System i jednej z dwóch jej metod. Przy okazji nieświadomie zakładaliśmy, że w czasie wykonywania pomiaru czas systemowy nie zostanie sztucznie zmieniony przez użytkownika, lub jakikolwiek proces na maszynie. W przypadku systemu na smartphonie to założenie może prowadzić do o wiele większych błędów niż w przypadku J2SE na jakimś desktopie. Tak więc SDK Androida dostarcza nam programistom kilku metod pobrania znacznie dokładniejszego czasu.

android.os.SystemClock.uptimeMillis()

Powyższa metoda pozwala na pobranie czasu od momentu uruchomienia urządzenia. Dokładnie czasu pracy, czyli w momencie gdy smartphone jest w stanie uśpienia, licznik nie jest inkrementowany. Poniżej znajduje się metoda podająca czas od momentu uruchomienia wliczając w to czas w uśpieniu.

android.os.SystemClock.elapsedRealtime()

Sama metoda pomiaru pozostaje bez zmian. Tak jak wykonując pomiar czasu w ASM odejmowaliśmy początek od końca pomiaru, tak samo należy wykonać tutaj. To jest w programowaniu piękne, że te same metody sprawdzają się niemal dla każdego języka programowania i niemal każdego urządzenia.

Android dostarcza jeszcze dwóch ciekawych metod. Pierwsza z nich podaje czas procesora w ms jaki proces skonsumował. Druga dostarcza tej samej informacji dla aktualnego wątku.

android.os.Process.getElapsedCpuTime()
android.os.SystemClock.currentThreadTimeMillis()

Ten post jest wynikiem raczej krótkich poszukiwań. Osoby co bardziej ciekawe odsyłam do dokumentacji klasy SystemClock. Można tam znaleźć jeszcze parę ciekawych rzeczy.

Czytaj też:

Brak komentarzy:

Prześlij komentarz