2013-04-19 9 views
6

Używam projektu bitmapfun () 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

  1. Otwórz wifi -> uruchom aplikację -> pobierz obrazy (działa poprawnie).
  2. Zamknij aplikację (przycisk Wstecz), dezaktywuj Wi-Fi -> Aktywuj sieć danych -> Uruchom ponownie aplikację (Nadal działa dobrze).
  3. 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 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ść 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?

+0

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

Odpowiedz

2

Co ci się przydarza, jest OK. Ponieważ ImageFetcher ładuje obraz, gdy OnCreate(), ale anuluje przez sieć dezaktywować. nie zawiera kodu automatycznego restartu. Więc jeśli chcesz ładowanie automatycznego restartu, dodaj kod do detektywa zmiany stanu sieci. Nie uważam tego za wrażliwy. Po prostu pozwól użytkownikowi na ponowne uruchomienie, kliknij coś jak przycisk odświeżania itp.

+0

, jeśli był to problem z dezaktywacją sieci, ten sam problem pojawiłby się w przypadku, gdy dezaktywuję wifi, a potem ponownie go aktywuję. Ale tak się nie dzieje w tym przypadku.Domyślam się, że gdy pojawia się problem, wywoływana jest funkcja cancelPotentialWork, która zwraca wartość false. Oznacza to, że widok obrazu zawiera odniesienie do zadania z poprzedniej sekcji. Jak mogę wyczyścić wszystkie poprzednie referencje? Czy udało Ci się odtworzyć problem? – user2065529