Wpis z mikrobloga

#androiddev #kotlin
Jak działa MutableList?

Zrobiłem sobie klasę z listą, w tej klasie jest też metoda, która wywołuje zapytanie do api. Uzupełniam tę listę danymi z api, następnie wołam aktywność, z której wywołałem tę metodę, że zapytanie z api zakończone. Aktywność sobie woła geta do listy. Zanim zawołam api, robię jeszcze clear.

Za pierwszym razem przychodzi ładnie wypełnione danymi. Za każdym kolejnym razem odsyła puste. W Javie to działało bez problemu. Dlaczego tu nie działa?
  • 26
  • Odpowiedz
@ZycieJestNobelon: Patrzyłem wiele razy i wygląda to tak jak napisałem. Najpierw aktywność woła metodę, która uzupełnia listę, a gdy skończy to przez listnera informuje aktywność, że zostało skończony, wtedy aktywność woła geta do listy.
  • Odpowiedz
następnie wołam aktywność, z której wywołałem tę metodę, że zapytanie z api zakończone


@push3k-pro: wyczuwam Memory Leak (choć to pewnie nie dlatego nie działa). Zerujesz tego listenera na ubijaniu aktywności?

Tak swoją drogą, nie lepiej użyć choćby RxJavy do takich rzeczy?
Druga sprawa, tego typu działania do robota dla ViewModela, nie
  • Odpowiedz
@push3k-pro:
Rozumiem argument o Rx, chociaż patrząc na kod znacznie by to ułatwiło życie.

W jednej czy nie jednej, chodzi o to, że przekazujesz Aktywność do jakiejś klasy jako listener. Tamta klasa czy obiekt ma referencję do Aktywności, ale nie masz kontroli nad instancją Aktywności, przychodzi co do czego (zmiana konfiguracji, aplikacja trafia do tła itp.) i Android ją ubija. Chciałby ją wywalić z pamięci, ale jakiś obiekt trzyma do niej referencję, więc nie może i ciągle ją trzyma w pamięci, razem z widokami innymi rzeczami, a na jej miejsce pojawia się kolejna aktywność, która znów robi to samo.
Tym bardziej, że tu masz object czyli Singleton, który sobie żyje i zbiera te wszystkie Aktywności i trzyma referencje do nich, zrób sobie debuga na CallListners i obróć parę razy ekranem albo daj w aktywności recreate() i zobacz co się
  • Odpowiedz
@Alpha_Male:

Jeśli to zadanie rekrutacyjne to nie mówię, że bym Cię uwalił, ale dobrze by było mieć chociaż świadomość, że można to zrobić lepiej.

Mam tego świadomość, niemniej, ja w czasie pisania tego programu nauczyłem się czegoś nowego -> według zasady, by chodzić na rekrutacje, bo można się czegoś nauczyć.

I poczytaj o Memory Leakach, bo jestem pewien, że jeśli Cię zaproszą na dalszy etap, to o to zapytają ( ͡
  • Odpowiedz
@ZycieJestNobelon: Nom, wtedy w ogóle nie będę mógł czyścić. Ja w tym przypadku poradziłem sobie po prostu przepisując a = b, właśnie wykańczam wszystkie elementy i chcę jeszcze sprawdzić czy to samo czasem nie zadziała przy tamtym odświeżaniu.
  • Odpowiedz
@push3k-pro: no cóż, w każdym razie powodzenia :) jak zmieniałem pracę to "chwilę" mi to zajęło i za każdym razem jak miałem takie zadania to spędzałem na tym masę czasu, bo uczyłem się przy okazji nowych rzeczy. Trochę to słabe (takie wrażenie oszukiwania, że niby umiem ;) ), ale nie zawsze na codzień robi się, tak jak się robić powinno, a potem trzeba nadrabiać.

Najważniejsze, żeby mieć świadomość, że można
  • Odpowiedz