Android DDMS: przewodnik po najlepszej konsoli Androida
Opublikowany: 2022-03-11Rozwój to trudny biznes. Cel jest w ciągłym ruchu, nowe technologie i domeny od czasu do czasu ożywają, nowe narzędzia pojawiają się od czasu do czasu, a języki zmieniają się w tym, co wydaje się być zarządzanym spustoszeniem.
Mimo to, nawet przy tych wszystkich zmianach, podstawowe zasady pozostają takie same. Jedna z najważniejszych z tych podstawowych zasad mówi, że aby stworzyć naprawdę niesamowite oprogramowanie, musisz uzyskać głęboką, ciągłą i szczegółową introspekcję w swoim systemie wykonawczym. Diagnostyka , debugowanie i profilowanie to terminy czasami używane w tym kontekście, ale reguła jest głębsza. Najwyższej klasy programista dosłownie „czuje” swój system. Wie, co spowoduje, że kawałek będzie czekał na zwolnienie większej ilości pamięci, co spowoduje, że jego wątki będą głodować procesora, które działania spowodują rozległe operacje we/wy lub dostęp do sieci, a tym samym spowolnią całą jego pracę.
Naprawdę nie da się tego obejść. Możesz być bardzo mądrym programistą piszącym niesamowity kod, ale dopóki nie będziesz mieć powyższej umiejętności, a mianowicie umiejętności monitorowania i badania szczegółów zachowania środowiska wykonawczego twojego systemu, nadal będziesz zawodził, jeśli chodzi o dostarczanie naprawdę najwyższej jakości Aplikacje.
W rzeczywistości, po zdobyciu pewnego doświadczenia, wykryjesz całą kategorię „chorób kodowych”, które można przypisać lekceważeniu zasady introspekcji: Krótko mówiąc, pisanie kodu (czasem kodu inteligentnego) bez ciągłego monitorowania jego skutków na rzeczywistej platformie .
DDMS w Androidzie: moja broń wyboru do introspekcji
Na szczęście dla nas, społeczności Androida udało się dostarczyć tak wiele najwyższej klasy narzędzi do introspekcji. Facebook Stetho jest jednym z najlepszych, ARO AT&T („Application Resource Optimizer”) jest nieco starszy, ale wciąż najwyższej klasy, z prawdopodobnie najlepszą konsolą do monitorowania sieci, podczas gdy LeakCanary stosuje znacznie bardziej ograniczone podejście, koncentrując się (i świetnie sobie radzi it) w bibliotece wykrywania wycieków pamięci w czasie wykonywania. Krótko mówiąc, nie brakuje narzędzi do debugowania Androida.
Jednak diamentem w koronie, narzędziem do introspekcji, któremu można zaufać, gdy konieczne jest wyodrębnienie kluczowych, dokładnych i dobrze sformatowanych danych dotyczących zachowania aplikacji w czasie wykonywania, jest nadal stary dobry serwer Dalvik Debug Monitor Server (DDMS) w Android Studio, który jest z nami (niestety niewykorzystany przez tak wiele zespołów) od czasów wtyczki Eclipse Android.
Jak ważny jest DDMS w rozwoju Androida? Cóż, wiedząc, co teraz wiem o DDMS i ogólnie monitorowaniu aplikacji mobilnych, powiedzmy, że 5-6 lat temu, jako mniej doświadczony programista Androida, zaoszczędziłbym mi wielu bólów głowy i nocy związanych z debugowaniem.
A chodzi o to, że DDMS jest tak prosty do opanowania!
Oczywiście duża część poprawnego korzystania z niego, podobnie jak w przypadku każdego innego narzędzia programowego, wiąże się z doświadczeniem. Musisz przez jakiś czas doskonalić swoje umiejętności zawodowe, aż staniesz się naprawdę dobry w monitorowaniu wydajności w czasie wykonywania. Ale nawet w ciągu kilku godzin, powiedzmy po przeczytaniu tego artykułu, jeśli zastosujesz się do moich sugestii i zastosujesz je w następnej aplikacji, wyniki będą niesamowite! Profilowanie i strojenie nawet skomplikowanych systemów nie jest takie trudne. To może być również zabawne!
Często zadawane jest pytanie dotyczące różnicy między początkującymi i zaawansowanymi programistami mobilnymi. Opanowanie DDMS w systemie Android — lub ogólnie, możliwości profilowania aplikacji i introspekcji — jest jedną z takich głównych różnic.
Uwaga: główną częścią stania się czołowym programistą jest korzystanie z najlepszych bibliotek dostępnych w Twojej domenie. W poprzednim artykule Toptal wymieniłem niektóre z najlepszych bibliotek programistycznych dostępnych dla Androida. W pewnym sensie ten artykuł jest kontynuacją artykułu „biblioteka” i obejmuje jedno z wielu narzędzi Androida. Nie trzeba dodawać, że jeśli chcesz poprawić swoje umiejętności programisty Androida, przeczytaj to teraz!
Szybki przewodnik po DDMS w Android Studio
A teraz, bez zbędnych ceregieli, zagłębimy się w opis DDMS, jednego z najlepszych narzędzi dla programistów Androida.
Porównując wysiłek z korzyściami, prawdopodobnie żadne inne narzędzie nie może poprawić jakości Twojej aplikacji i pomóc w zlokalizowaniu naprawdę niechlujnych i nieuchwytnych błędów, które może zawierać. Ale wciąż, z jakiegoś powodu (lenistwo, ktokolwiek?), tak wiele zespołów nie korzysta z DDMS.
Zacznijmy od szybkiego kursu w DDMS:
DDMS jest dostępny poprzez Studio > Narzędzia > Android > Monitor urządzenia Android i klikając przycisk DDMS w menu. Możesz również umieścić go jako ikonę skrótu (tak) w górnym panelu.
Po otwarciu zobaczysz:
Lewy panel umożliwia wybór urządzenia/aplikacji, a prawa konsola zapewnia wiele widoków, każdy na osobnej karcie, z których każdy przedstawia określony widok Twojej aplikacji.
Główne usługi świadczone przez Dalvik Debug Monitor Server to:
- Statystyki użycia pamięci aplikacji (statystyka całkowitej sterty i alokacji obiektów)
- Statystyki wątków aplikacji
- Zrzut ekranu urządzenia
- Eksplorator plików urządzenia
- Fałszowanie połączeń przychodzących i SMS-ów
- Podszywanie się pod dane lokalizacji
- Logcat
Aby uzyskać aktualną wartość pamięci sterty używanej przez twoją aplikację, po prostu wykonaj następujące czynności:
- Podłącz urządzenie, na którym działa Twoja aplikacja
- Kliknij przycisk Aktualizuj stertę, aby włączyć zbieranie statystyk sterty
- Otwórz zakładkę Sterta
- Kliknij „Przyczyna GC”, aby wymusić uruchomienie GC. Dopiero po takim uruchomieniu rozpocznie się zbieranie danych na stercie
- Pozostaw otwartą kartę, kontynuuj pracę nad swoją aplikacją i od czasu do czasu klikaj ponownie „Przyczyna GC”, aby odświeżyć dane statystyk sterty
Ten ostatni wiersz prawdopodobnie wymaga dodatkowego wyjaśnienia. Wykorzystanie pamięci to jedna z tych wartości analitycznych, w których jej dynamika jest o wiele ważniejsza niż wartość początkowa. W przypadku większości aplikacji nie będziemy się zbytnio przejmować początkową wartością użycia sterty. Zależy nam bardzo na rozwoju tej wartości, ponieważ da nam to wyraźną wskazówkę, co do jednego z prawdziwych koszmarów czyhających na deweloperów mobilnych — wycieków pamięci Androida:
Moje użycie modułu statystyk sterty jest proste; w ramach cyklu rozwoju aplikacji, po wprowadzeniu zmian, które powinny wpłynąć na wykorzystanie sterty, aktywuję moduł „Cause GC”, aby rozpocząć zbieranie statystyk, aktywować (zwykle więcej niż jeden raz) pozycje mojej aplikacji wymagające dużej ilości sterty, i okresowo „Powoduj GC”, aby się odświeżać. Jeśli użycie sterty nadal rośnie, mam wyciek pamięci na rękach i muszę go rozwiązać (szczegóły jak - poniżej). Jeśli nie i bez względu na rzeczywistą wielkość sterty, to wszystko w porządku.
Jeśli zostanie wykryty wyciek pamięci, następnym narzędziem, którego użyję, jest śledzenie alokacji obiektów. Zobaczmy, co może zrobić dla zarządzania pamięcią w Androidzie.
Śledzenie alokacji obiektów
Mówiąc najprościej, narzędzie do śledzenia alokacji dostarczy ci informacji wymaganych do ustalenia, kto jest stroną, która „obwinia” o obecny rozmiar sterty. Ten moduł powie Ci, z jakich wątków i metod pochodziły polecenia alokacji w czasie rzeczywistym, co czyni go nieocenionym do analizy pamięci w systemie Android.
Aby rozpocząć śledzenie, wykonaj następujące czynności:
- Wybierz odpowiednie urządzenie/proces jak poprzednio
- Przejdź do karty Śledzenie alokacji i kliknij Rozpocznij śledzenie, aby rozpocząć.
- Odtąd wszystkie nowe przydziały będą śledzone
- Kliknij „Pobierz przydziały”, aby uzyskać widok listy wszystkich ostatnich przydziałów (ostatni od ostatniego „rozpoczęcia”)
- Aby dowiedzieć się, kto jest organem odpowiedzialnym za alokację, kliknij odpowiednią linię na liście
Teraz, z własnego doświadczenia, wykonywanie intensywnych działań alokacyjnych w aplikacji, a następnie kliknięcie „Pobierz przydziały”, aby wyświetlić liczniki alokacji, powinno zwykle kierować Cię do wycieku w prosty sposób; czasami, gdy wyciek jest nieliniowy (tzn. zdarza się od czasu do czasu) LUB gdy Twoja aplikacja zawiera wiele wycieków, które mogą nie działać. W takich przypadkach, a nie spotkałem się z wieloma z nich, trzeba będzie ręcznie utworzyć plik zrzutu HPROF i przeanalizować go. Analiza pamięci i zarządzanie pamięcią systemu Android nie zostaną szczegółowo omówione w tym artykule. Zobacz tutaj niektóre tropy.
Konsola informacji o wątku: Łatwe korzystanie z procesora Androida
Dobrze znane każdemu programiście, synchroniczne ścieżki wykonywania logiki są pogrupowane w wątki, z których każdy tworzy jeden szeregowy przepływ wykonywania w aplikacji. Dosłownie wszystkie aplikacje używają więcej niż jednego wątku wykonania. Niektóre z nich używają dziesiątek.
Ogólne badanie potencjalnych problemów podczas korzystania z wątków wykracza poza zakres tego artykułu. Skoncentrujmy się zatem na jednym, a mianowicie na głodzie wątków, który jest głównym problemem, z powodu którego odwiedzasz konsolę informacji o wątkach.
We wszystkich aplikacjach mobilnych różne wątki będą konkurować o czas procesora. Po prostu jest ich za mało. Co się stanie, jeśli z jakiegoś powodu jeden lub więcej wątków nie uzyska wymaganego czasu wykonania? Zwykle złe rzeczy. System nie będzie się zachowywał tak, jak zaplanowałeś, co zawsze jest złym pomysłem. Potencjalnymi przyczynami tego problemu może być ustawienie niskiego priorytetu, jednoczesne wykonywanie innych wątków ze zbyt wysokim priorytetem, spędzanie długiego czasu na monitorach synchronizacji i nie tylko. Wszystko bardzo trudne do wykrycia przez sam przegląd kodu.
Konsola wątku Android DDMS na ratunek!
Po wejściu do widoku wątku zobaczysz listę złożoną z rekordów wątków, z których każdy zawiera nazwę i identyfikator wątku oraz dwa dodatkowe liczniki zwane utime i stime. Utime mierzy całkowity czas spędzony przez wątek na wykonywaniu kodu użytkownika (pomyśl o swoich funkcjach i bibliotekach innych firm), podczas gdy stime mierzy całkowity czas spędzony na kodzie systemowym (uśpienie, synchronizacja, wywołania systemowe — dużo). Pierwsza z nich – utime – będzie dla nas zwykle bardziej interesująca, chociaż przychodzą mi do głowy problemy, które w większości objawią się licznikiem czasu.
OK, mamy uruchomiony nasz kod, w tym kilka wątków, i chcemy się upewnić, że wszystkie nasze wątki mają swój udział w czasie procesora. W tym celu najpierw pozwalamy naszemu systemowi działać przez chwilę, a następnie otwieramy zakładkę wątków i zaczynamy szukać „osobliwych” wartości utime. Zero może z pewnością stanowić problem — wątek nie miał dosłownie żadnego czasu procesora i żadnego wykorzystania procesora. Ale zbyt wysokie wartości mogą reprezentować inny aspekt tego samego problemu: mianowicie wątki, których priorytet jest tak wysoki, że powoduje głód u innych.
Zauważ, że dla jednego typu wątków zero lub prawie zero wartości utime nie będzie oznaczać prawdziwego problemu. Są to wątki związane z we/wy, wątki, które w większości mają dostęp do sieci lub dysku (lub bazy danych). Te wątki powinny spędzać większość czasu albo czekając na przybycie danych, albo blokując oczekujące wywołania systemowe, żadne z tych działań nie zwiększa licznika czasu utime. Poznaj swoje wątki!
Wskazówka: nigdy nie używaj domyślnej nazwy wątku. To nic nie znaczy i zazwyczaj nie uda się go wykryć w widokach DDMS. zamiast tego za każdym razem, gdy tworzysz wątek lub pobierasz go z puli wątków, rozpocznij interakcję, przypisując mu nazwę, która nie wymaga wyjaśnień. Dzięki temu Twoje życie będzie łatwiejsze niż debugowanie/profilowanie systemu. Zwykle dołączam nazwę aplikacji, aby odróżnić wątek wygenerowany przez Androida od wątków generowanych przez mój własny kod, na przykład: MyApp-server-connector, MyApp-db-interactor itp.

Wskazówka: Priorytet wątku oznacza (mówiąc ogólnie) ilość czasu procesora, który zostanie mu przyznany przez harmonogram. Priorytet przypisywany wątkom roboczym ma kluczowe znaczenie dla ogólnej wydajności i „płynności” Twojej aplikacji, a w wielu przypadkach może stanowić różnicę między zachowaniem zgrabnie szybkim a nierównym, wolnym. Zasada jest tutaj prosta: domyślny priorytet przypisywany przez Androida, czyli NORMALNY=5, prawie zawsze nie jest tym, którego chcesz użyć. Zamiast tego w przypadku większości wątków roboczych potrzebujesz znacznie mniejszego wpływu na ogólne wykorzystanie procesora. Aby to zrobić, przy starcie wątku ustaw jego priorytet na mniejszą wartość, zwykle wybieram priorytet=3.
Konsola statystyk sieci
Statystyki sieciowe pozwalają monitorować zarówno przychodzące, jak i wychodzące kanały komunikacji z aplikacją w sposób rozsądnie czytelny dla człowieka.
Oś y na wykresie sieci reprezentuje szybkość transmisji mierzoną w KB/sekundę, natomiast oś x przedstawia upływający czas w sekundach. Dlatego, aby szybko oszacować wielkość transmisji, spróbuj oszacować powierzchnię danego szpica. Po pewnym czasie staje się to dość łatwe.
Zauważ, że po wejściu do tej konsoli będziesz musiał kliknąć górny przycisk „włącz”, aby pomiary sieciowe zaczęły się pojawiać.
Zanim konsola sieciowa dojrzała do obecnego poziomu, programiści zwykle musieli uciekać się do korzystania z aplikacji sniffer (niektórzy nadal to robią), aby uzyskać podobne informacje.
Wspaniałą rzeczą w tej konsoli jest sposób, w jaki wizualizuje ona jedno z głównych zachowań związanych z wyczerpywaniem się baterii — trwającą komunikację o małych pakietach. Jak wielu z Was wie, to, co sprawi, że Twoja aplikacja wyczerpuje baterię, to nie pięć minut intensywnej pracy w sieci, ale raczej długie, krótkie, powtarzające się sieci, np. w celu podtrzymania aktywności, diagnostyki lub aktualizacji statusu.
Po wykryciu takiego wzorca, a wizualne wyświetlanie pakietów konsoli sieciowej sprawia, że jest to tak łatwe, natychmiast pomyśl o grupowaniu. Czy mogę połączyć wiele małych transmisji w jedną dużą? Wpływ tej zmiany na baterię z pewnością przeniesie aplikacje z kategorii rozładowywania baterii do kategorii grzecznej!
Wskazówka: nigdy nie ładuj do pamięci obrazu w takim stanie, w jakim jest. To jest awaria braku pamięci, która może się wydarzyć. Zamiast tego wykonaj ładowanie w zmniejszonej skali, a nawet lepiej, użyj biblioteki innej firmy, aby zarządzać skalowaniem za Ciebie.
Chociaż rzadko będziesz korzystać z tych informacji, pamiętaj, że DDMS opiera się na stosie Android Debug Bridge (ADB) do przekazywania danych z powrotem/z urządzenia. Jeśli DDMS nie wyświetla Twojej aplikacji lub zawiesza się w trakcie sesji DDMS, najlepszym rozwiązaniem będzie otwarcie konsoli i wpisanie:
adb devices
aby upewnić się, że Twoje urządzenie jest dostępne i autoryzowane przez ADB. Jeśli tak nie jest, w wielu przypadkach ponowne uruchomienie lokalnego serwera ADB powinno rozwiązać problem:
adb kill-server adb devices # restarts the adb server and displays all detected devices
Jeśli nadal masz problemy, a Twoja aplikacja jest zainstalowana na urządzeniu fizycznym, spróbuj odłączyć wszystkie instancje emulatora. Czemu? Ponieważ DDMS łączy się zarówno z urządzeniami fizycznymi, jak i instancjami emulatora, domyślnie jest to drugie.
Przykład rzeczywistego użycia DDMS: aplikacja zatrzymuje się (nie ulega awarii, tylko się zatrzymuje). Użytkownik natychmiast biegnie do pobliskiej stacji roboczej, łączy się z USB i otwiera DDMS w widoku wątku, aby znaleźć stos wątków » nieudany wątek » ślad stosu — w moim przypadku z powodu zakleszczenia synchronizacji, które po wykryciu można było łatwo rozwiązać poprzez przełączanie.
Wskazówka: jeśli standardowa pamięć RAM przydzielona do Twojej aplikacji przez Androida jest niewystarczająca, co może się zdarzyć np. w przypadku aplikacji intensywnie korzystających z multimediów, zauważ, że możesz uzyskać około 15-20% dodatkowej pamięci na większości urządzeń, podnosząc flagę manifestu _ largeHeap : https://developer.android.com/guide/topics/manifest/application-element.html_
Emulacja stanu urządzenia w systemie Android DDMS
Z reguły aplikacje mobilne nie są konstrukcjami liniowymi. Zamiast tego wdrażają strategie świadomości, które pozwalają im monitorować i reagować na zmiany stanu urządzenia. Aplikacja może na przykład odsłuchiwać przychodzące połączenia lub wiadomości tekstowe, dostosowywać swój stan do stanu sieci oraz śledzić i reagować na zmiany lokalizacji urządzenia.
Trywialnym przykładem tego ostatniego może być aplikacja GPS. Większość z nas nie tworzy takich aplikacji (niestety rynek nie jest wystarczająco duży…), ale i tak w wielu przypadkach wdrażamy logikę, która jest zależna od lokalizacji, czy jest to prosty widok mapy aktualnej pozycji użytkownika, śledzenie trasy lub wyświetlanie danych wrażliwych na lokalizację.
Testowanie pod kątem warunków wrażliwych na stan jest bardzo skomplikowane, czasami bardziej niż pisanie samego kodu. Jeśli masz fizyczne urządzenie z kartą SIM, możesz oczywiście nawiązywać i odbierać połączenia i SMS-y. Zmiana stanu telefonu urządzenia jest o wiele trudniejsza, ale nadal można to zrobić. Testowe zmiany lokalizacji mogą być trudniejsze, ale spacer po mieście z laptopem jest opcją…
Ale nadal — jak poradzimy sobie z instancjami emulatora? Jak możemy je przetestować pod kątem tych zmian?
DDMS znów na ratunek. Jedną z silniejszych, ale często pomijanych funkcji DDMS jest jego zdolność do wydawania („spoof”) pozorowanych zdarzeń do działającej instancji emulatora. DDMS może wykonać połączenie z określonego numeru do emulatora, wysłać SMS, zmienić dane o stanie telefonu i nie tylko.
Po dotarciu do emulatora wszystkie te sfałszowane zdarzenia nie będą już odróżnialne od „prawdziwych” zdarzeń, tj. tak, jakby zostały odebrane przez czujniki sprzętowe. W szczególności wszystkie odpowiednie odbiorniki Twojej aplikacji zostaną aktywowane w taki sam sposób, jak po otrzymaniu prawdziwego połączenia/wiadomości SMS.
Aktywacja stanu i działań telefonicznych jest dość prosta:
Aby przetestować swoją aplikację pod kątem przypadków słabej łączności sieciowej (co powinieneś zrobić w dowolnej aplikacji zorientowanej na sieć), przejdź do sekcji Stan telefonii i ustaw wartości prędkości i opóźnienia na żądane wartości. Zwykle wybieram wartość GPRS dla obu, jako skuteczny sposób na emulację słabej łączności, ale możesz swobodnie ustalać własne wartości.
Aby symulować połączenia telefoniczne lub SMS-y, przejdź do sekcji Akcja telefonii, ustaw pierwotny numer telefonu, w razie potrzeby dodaj wiadomość tekstową i odpal. To narzędzie jest szczególnie skuteczne, gdy masz wyznaczoną dedykowaną trasę kodu dla połączeń z zagranicy i chcesz ją przetestować w ramach budżetu.
Sprawy robią się ciekawsze, jeśli chodzi o wyśmiewanie nowej lokalizacji.
Jeśli wszystko, do czego dążysz, to ustawienie nowej lokalizacji dla instancji emulatora, wybierz opcję Ręcznie, ustaw żądane wartości szerokości/długości geograficznej i naciśnij Wyślij.
Ale co, jeśli zamiast ustawiać jedną stałą lokalizację, chcesz, aby Twoja aplikacja przechodziła wcześniej ustaloną trasę — powiedzmy, zbadaj jej zachowanie, gdy użytkownik podróżuje z jednego miasta do drugiego? Taki test może mieć wielką wartość dla dowolnej aplikacji opartej na mapach, a także innych aplikacji wrażliwych na lokalizację, które ustawiają swoje okno danych według lokalizacji użytkownika. Tutaj będziesz chciał zobaczyć, że zmiana lokalizacji z inną prędkością zapewni aktualność wyświetlanego okna danych.
W tym celu użyjemy specjalnego formatu o nazwie KML, który został specjalnie opracowany do użytku z Google Earth i który reprezentuje trasy lub ścieżki jako zestaw połączonych punktów w przestrzeni, które mogą być obsługiwane przez urządzenia obsługujące GPS.
GPX to alternatywny format ścieżki obsługiwany przez DDMS. Ze względów praktycznych te dwa elementy należy traktować wymiennie, gdy są używane do podszywania się pod lokalizację mobilną.
Przejdźmy teraz przez etapy ustawiania makiety trasy do emulatora.
- Utwórz trasę. Zdecydowanie najprostszym sposobem byłoby skorzystanie z opcji kierunku Google Maps, ustawiając odpowiednie źródło i miejsce docelowe.
Gdy trasa zostanie wyświetlona na mapie, przejdź do wiersza adresu i skopiuj adres URL
Mając adres URL w schowku, przejdź do wizualizatora GPS, wklej go w polu tekstowym „Podaj adres URL” i kliknij przycisk Konwertuj:
i kliknij, aby pobrać wynikowy plik GPX (o nieco niechlujnej nazwie, np. 20170520030103-22192-data.gpx)
- Wracając do Kontroli lokalizacji DDMS, otwórz zakładkę GPX, kliknij Załaduj GPX i wybierz nowo pobrany plik
- Skończyliśmy! Możesz teraz nawigować między różnymi lokalizacjami na trasie, klikając przyciski wstecz i dalej lub klikając przycisk Odtwórz, aby automatycznie przechodzić przez trasę z ustaloną prędkością.
Nie musisz tworzyć własnej trasy. Mnóstwo tras do pobrania z witryny takiej jak OpenStreetMap (patrz sekcja „Ślady GPS”).
Na koniec należy pamiętać, że w przeciwieństwie do starszych wersji DDMS, w których ładowanie pliku trasy było proste, nowsze wersje mogą wymagać pewnych prób i błędów podczas ładowania określonej trasy.
Na przykład wygląda na to, że tylko GPX 1.1 jest obsługiwany przez DDMS. Nowe wersje GPX mogą wymagać ręcznej regulacji.
Ponadto format punktów orientacyjnych GPX nie jest już obsługiwany. Zamiast tego użyj formatu GPX Track:
<trk> <name /> <cmt /> <trkseg> <trkpt lat="27.0512" lon="-80.4324"> <ele>0</ele> <time>2017-02-02T08:01:41Z</time> </trkpt> </trkseg> </trk>
Debugowanie Androida: godzina w tygodniu robi różnicę!
Dość teorii! Czas na trochę praktyki. Sugeruję, zakładając, że jesteś programistą Androida, że rozpoczynając swój następny projekt, poświęcisz tylko godzinę tygodniowo na zapoznanie się z wydajnością swojej aplikacji za pośrednictwem DDMS.
Będziesz zaskoczony ilością informacji wysokiej jakości (tzn. informacji, które mogą być wykorzystane do natychmiastowego poprawienia stanu Twojej aplikacji), które Ci to zapewni!
Android DDMS, jak wielokrotnie widziałem z początkującymi programistami, to narzędzie, które może znacznie poprawić możliwości programisty, pod warunkiem, że jest opanowane i odpowiednio wykorzystywane. Zdolność programisty Androida do dostarczania najwyższej klasy systemów dosłownie wzrośnie o stopień lub dwa, gdy w pełni wykorzystają potencjał DDMS w rozwoju Androida. Dlatego poświęcenie kilku godzin na dobre wykorzystanie DDMS brzmi jak sprytna inwestycja, ponieważ może znacznie poprawić wydajność i wydajność Androida.
Bądź jednym z mądrych facetów. Użyj tego.