Używam projektu bitmapfun (gridview) w mojej aplikacji i podczas testowania tego znalazłem problem. Kroki prowadzące do odtworzenia tego problemu są następujące:developer.android.com/training bitmapfun project
- Otwórz wifi -> uruchom aplikację -> pobierz obrazy (działa poprawnie).
- Zamknij aplikację (przycisk Wstecz), dezaktywuj Wi-Fi -> Aktywuj sieć danych -> Uruchom ponownie aplikację (Nadal działa dobrze).
- Zanim wszystkie obrazy zostały pobrane, zamykam aplikację (przycisk Wstecz) -> dezaktywuj sieć danych -> włącz Wi-Fi. Po tym kroku po ponownym uruchomieniu aplikacji obrazy nie są pobierane.
W kodzie logowania widzę, że wszystkie obrazy są anulowane w funkcji cancelPotentialwork() i nigdy się nie uruchamiają. Domyślam się, że coś dzieje się z poprzednim bitmapworkerTask (odpowiedzialnym za pobranie) i istnieje kolizja z nowym zadaniem. W mojej aplikacji po naciśnięciu klawisza backbutton wyczyściłem wszystkie pamięci podręczne. Ale to nie jest przyczyną problemu, ponieważ testowałem ten sam scenariusz w oryginalnej bitmapfun i pojawił się problem! Jak mogę rozwiązać ten problem? Zmieniłem również wielowątkowość asynctask projektu w pojedynczy wątek! Czy istnieje sposób, aby wyczyścić wszystkie odwołania do widoku obrazu i anulować wszystkie uruchomione zadania?
Przepraszam za mój angielski i nie podam więcej informacji o naturze projektu bitmapfun, ale to bardzo rozszerzy moje pytanie! Zapytaj mnie o cokolwiek!
Edytuj: W celu odtworzenia problemu lepiej jest wyczyścić pamięć podręczną za każdym razem, gdy opuścisz tę czynność za pomocą opcji menu. Nie jest też pewne, czy problem pojawi się, jeśli raz wykonasz kroki 1-3. Może musisz je powtórzyć!
Edit2 (Dodatkowa pomoc): Kiedy rozpocząć działalność bez problemu logcat dla pierwszego obrazu jest następująca:
04-24 02:31:56.400: D/ImageWorker(25625): doInBackground - starting work
04-24 02:31:56.400: D/ImageFetcher(25625): processBitmap - https://lh3.googleusercontent.com/--L0Km39l5J8/URquXHGcdNI/AAAAAAAAAbs/3ZrSJNrSomQ/s160-c/Antelope%252520Butte.jpg
04-24 02:31:56.400: D/ImageFetcher(25625): processBitmap, not found in http cache, downloading...
i kiedy rozpocząć działalność z PROBLEMU logcat to:
04-24 02:28:07.970: D/ImageWorker(24014): cancelPotentialWork - cancelled work for https://lh3.googleusercontent.com/--L0Km39l5J8/URquXHGcdNI/AAAAAAAAAbs/3ZrSJNrSomQ/s160-c/Antelope%252520Butte.jpg
Dlaczego w drugim przypadku, gdy wywołano zadanie cancelPotentialWork, to doInBackground nigdy się nie uruchamia? Zgodnie z sekwencją kodu jest to następna część, która powinna zostać wykonana! Czy ktoś ma przynajmniej jakiś pomysł, gdzie powinienem szukać błędu?
Nie mogę zrozumieć, na czym polega problem. Dla każdej nowej bitmaworkerty dodajemy ją do listy, a po zakończeniu aktywności anuluję wszystkie zadania w tym listę, aby upewnić się, że żadne oczekujące zadanie nie wpływa na działanie po ponownym uruchomieniu. Również dla każdego asyncDrawable i zmieniam bitmapWorkerTaskReference na null, aby mieć pewność, że nie ma żadnego odniesienia bitmapWorkerTask, które nie zostało zbuforowane. Moim celem jest symulowanie warunków, kiedy aktywność zaczyna się od początku i wszystko działa dobrze. Ale mimo wszystko problem nadal istnieje! – user2065529