Pracuję nad projektem Android, w którym muszę załadować niektóre obrazy do GridView. Obrazy mogą znajdować się w pamięci podręcznej, jeśli brakuje pamięci podręcznej, a następnie zapytać serwer internetowy. Mój projekt polega na użyciu dwóch wątków do wykonania zadania ładowania. Jeden wątek do odczytu pamięci podręcznej i jeden wątek do pobrania. Istnieją 3 wątki, w tym interfejs użytkownika. Każdy z nich ma własną kolejkę komunikatów i używa Handler do komunikacji.Czy powiązana usługa lub dostosowane wątki podczas pobierania czegoś?
Moje pytanie brzmi, czy zamiast tego powinienem korzystać z usług związanych? Faktycznie zdałem sobie sprawę z powyższego projektu i wydaje się, że nic złego, ale GC działa bardzo ciężko, co można wywnioskować z logcat.
Inną kwestią jest to, że istnieje kilka wątków, gdy używam DDMS do monitorowania wątków. Wynika to z tego, że ten sam mechanizm ładowania jest używany w kilku działaniach. Pozwoliłem wątkom wyjść z pętli komunikatów podczas wywoływania funkcji onPause(), jestem pewien, że tylko dwie z nich są żywe w tym samym czasie. Ale widzę je wszystkie w DDMS. (BTW, dlaczego wątki nadal istnieją?) Pozwalałem wątkowi = null;)
Tak, jednym słowem, moje pytanie brzmi: Czy to zadanie ładowania może korzystać z usługi związanej?
Dziękuję za odpowiedź. Ale jeden wątek w tle do buforowania i pobierania nie jest wystarczający. W ten sposób obraz w pamięci podręcznej nie zostanie załadowany, dopóki nie zakończą się poprzednie zadania pobierania. W projekcie z dwoma wątkami obraz może być wczytany jak najszybciej, jeśli jest w pamięci podręcznej. O ile mi wiadomo, "Bound Service" może służyć do komunikacji z działaniem. Ten komunikat może być dwustronny, więc teoretycznie obowiązująca usługa dotyczy tej sytuacji. Ale zastanawiam się, czy związana usługa jest bardziej wydajna. – Alley003
Usługa nie jest w żaden szczególny sposób: jeśli chcesz, aby uruchamiał wątki, musisz je utworzyć. W twoim przypadku możesz chcieć mieć wiele (ale ograniczonych) wątków ładujących, abyś mógł szybciej robić rzeczy. Istnieją biblioteki open source, które to robią, a IIRC jest kilka przykładów w kodzie AOSP. W każdym razie usługa nie jest czymś, co można tutaj wykorzystać. –
Oto bardzo dobry: https://github.com/novoda/ImageLoader. Jeśli sprawdzisz źródło, zobaczysz, że nie jest to trywialne i możesz chcieć użyć biblioteki zamiast próbować jej na nowo. –