2013-04-15 15 views
5

Opracowaliśmy prototypy NDK do prostego projektu. Kod jest kompilowany i działa na urządzeniu oraz w symulatorze. Jednak patrząc w menu ustawień na telefonach: (Samsung Galaxy Nexus (Android 4.2.2), Samsung Gio (Android 2.3.6)), uruchomienie aplikacji na Gio zajmuje o wiele więcej miejsca niż podczas uruchamiania aplikacji Galaxy Nexus. Ponadto, następujące raporty dowodzenia znacznie wyższe allocations sterty dla GIO:Czy urządzenia z Androidem używają różnych ilości sterty i śladu na potrzeby tej samej aplikacji

System.out.println(Debug.getNativeHeapAllocatedSize()/1049L); 

Używamy statycznych bibliotek dla wielu funkcjonalności. Dokładne wyniki są następujące:

NEXUS:

  • Footprint (MB) (wdrożenie Java) 1,24
  • Footprint (MB) (C++ lib realizacja) 0,96
  • alokacji pamięci (MB) (Implementacja Java) 1.6
  • Alokacja pamięci (MB) (implementacja biblioteki C++) 1.5

GIO:

  • Footprint (MB) (wdrożenie Java) 1,19
  • Footprint (MB) (C++ lib realizacja) 1,71
  • alokacji pamięci (MB) (wdrożenie Java) 4,6
  • Alokacja pamięci (MB) (implementacja biblioteki C++) 5.5

Jaki jest powód tej różnicy w użytkowaniu Footprint i pamięci?

(Pomiar alokacji na urządzeniu z systemem iOS (biblioteka C++) daje w przybliżeniu taki sam wynik na 3GS jak na Galaxy Nexus).

+0

Czy urządzenia 2 użyć tej samej wersji systemu operacyjnego Android? Myślę, że jest to powiązane. – Raptor

+0

Zaktualizowane pytanie z Androidem w wersji –

+2

Android OS v2 i v4 traktują pamięć w inny sposób, ponieważ używają innego jądra. Może to jest powodem różnicy. – Raptor

Odpowiedz

2

Istnieje wiele różnic pomiędzy 2.x Android i Android 4. Przykładem jest jak pamięć bitmapy udało:

Na Android Android 2.2 (poziom API 8) i dolny, kiedy śmieci kolekcji występuje, wątki aplikacji zostają zatrzymane. Powoduje to opóźnienie, które może obniżyć wydajność. System Android 2.3 dodaje kolekcję śmieci współbieżnych , co oznacza, że ​​pamięć jest odzyskiwana wkrótce po tym, jak bitmapa nie jest już przywoływana.

W systemie Android 2.3.3 (poziom interfejsu API 10) i dolny, dane pikseli dla mapy bitowej są przechowywane w pamięci macierzystej. Jest on oddzielony od samej bitmapy, która jest przechowywana w stosie Dalvik . Dane pikseli w pamięci rodzimej nie są udostępniane w przewidywalny sposób, co potencjalnie może spowodować, że aplikacja krótko przekroczy limity pamięci i awarię aplikacji. Od wersji Android 3.0 (poziom API 11) dane piksela są przechowywane na kupie Dalvik wraz z powiązaną mapą bitową.

Cytat z: http://developer.android.com/training/displaying-bitmaps/manage-memory.html

Powiązane problemy