2012-11-30 9 views
7

Potrzebuję uzyskać listę wszystkich aplikacji zainstalowanych na urządzeniu w ciągu 5-10 sekund po otwarciu aplikacji przez użytkownika.Android: Pobieranie listy aplikacji na urządzenia - bardzo wolno

Dzieje się tak, ponieważ trwa to ok. 5-10 sekund dla typowego użytkownika mojej aplikacji na Androida, aby poprosić o informacje o aplikacjach zainstalowanych na urządzeniu.

Aby to było istotne, za każdym razem, gdy moja aplikacja jest ładowana, muszę utworzyć nową kopię listy zainstalowanych aplikacji.

Jednak użycie kodu poniżej zajmuje ponad 30 sekund na czterordzeniowym urządzeniu z systemem Android z ok. 400 aplikacji (system i zainstalowany - potrzebuję obu).

Miałem kod wykonywalny w "na tworzenie", ale nikt nie czekał 30 sekund, aby otworzyć aplikację. Przesunąłem go do AsyncTask, więc moja aplikacja otwiera się natychmiast. Ale nadal trwa to +30 sekund; a jeśli ktoś poprosi o konkretną aplikację przed załadowaniem listy, może nie uzyskać poprawnych informacji.

Dlaczego ten kod jest taki wolny? I co mogę zrobić, żeby to przyspieszyć? Zapłacę w złocie każdemu, kto może zrobić to 10 razy szybciej lub dać mi dobrą napiwek.

final PackageManager pm = getPackageManager(); 
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA); 

for (ApplicationInfo packageInfo : packages) { 
    InstalledAppsName.add(packageInfo.loadLabel(pm).toString()); 
    CountApps=CountApps+1; 
} 
+0

jak szybko pełna lista aplikacji w ustawieniach ładuje się na tym samym urządzeniu? – FoamyGuy

+0

Przetestowałem to za pomocą opcji ustawień (zgodnie z sugestią) na tym samym urządzeniu i jest szybsze niż powyższy kod. Około 10-15 sekund, aby załadować. Nadal nie jest idealny, ale lepszy. Jakieś sugestie? – jjj

+0

Czy wiesz, która linia kodu wymaga najwięcej czasu? – Uooo

Odpowiedz

2

Zobacz PackageInfo LoadLabel slow performance

Pierwsze etykieta jest tak długo, bo (chyba) musi być ładowane z pliku APK. W międzyczasie możesz po prostu pokazać nazwy paczek i krok po kroku zastąpić je etykietą.

Powiązane problemy