Kiedy po raz pierwszy przeczytałem o rzeczywistości na ich stronie, byłem bardzo podekscytowany sprawdzeniem ich testu porównawczego. Kiedy jednak wszedłem do części ograniczającej, utknąłem tam przez 2 minuty i zastanawiałem się nad "zapobieganiem dzieleniu się przedmiotami przez wątki". Od wewnątrz mówiło mi, że idę do królestwa, ale to ograniczenie powstrzymuje mnie. W końcu zdecydowałem się zaimplementować jakieś opakowanie, które pozwala mi udostępniać ten obiekt we wszystkich wątkach.
O to chodzi. Proces odczytywania i zapisywania na dysku zajmuje więcej czasu niż proste tworzenie obiektu. To jest punkt, który noszę przy tworzeniu opakowania.
1) I keep pozwala na stworzenie obiektu podklasy realmObject w dowolnym miejscu w stosunku do reguły dostępu do obiektu w tym samym wątku, na którym jest tworzony.
np.
XyzsubclassofRealmObject xyzObject = new XyzsubclassofRealmObject();
2) Przepuścić tego obiektu do metody, która wykonuje operację bazy danych
np
insertOrUpdate(xyzObject);
//implementation
insertOrUpdate(XyzsubclassofRealmObject object) //you can make this method generic to accept any object that is subclass of RealmObject
{
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
XyzsubclassofRealmObject databaseObject = realm.copyToRealmOrUpdate(object);
//notice this copyToRealmOrUpdate method provides by Realm
realm.commitTransaction();
XyzsubclassofRealmObject copyObject = clone(databaseObject);
return copyObject;
}
3) Teraz są również dwa punkt one wspomnieć, że
podklasa RealmObject tylko domyślny getter i metody setter i pozwala metody statycznej, jeśli chce nasz inną logikę. dzięki Bogu, pozwalają na statyczną metodę. :)
może implementować interfejs bez metod. :(
Myślałam o klonowanie databaseObject który wrócił z copyToRealmOrUpdate. Jako interfejs pozwala bez metody (tj 2nd punkt), 1 punkt przyszedł mi na pomoc.
public static XyzsubclassofRealmObject clone(XyzsubclassRealmObject databaseObject)
{
XyzsubclassOfRealmObject obj = new XyzsubclassofRealmObject();
obj.setXyz(databaseObject.getXyz());
return obj;
}
Zamiast wywoływać metodę klonowania bezpośrednio, jak pokazano tutaj, użyłem metody odbicia wywołać metodę klonowania jak pisałem rodzajowe otoki do wykonywania operacji bazy danych zamiast do konkretnego modelu. Możesz wybrać swój własny sposób:
To wszystko. Jesteś skończony. Jak widzisz, zwracamy skopiowany obiekt zamiast obiektu bazy danych, możesz go użyć w dowolnym wątku. :)
Wniosek: wiele blogów i postów mówi, że jest tak szybka w działaniu, że można jej używać w wątku interfejsu podczas wykonywania transakcji. Ale wybór zależy od ciebie. Nie wiesz z góry, ile danych będzie wprowadzanych do bazy danych od momentu, gdy zwiększy się wykorzystanie aplikacji. Jeśli ta transakcja będzie miała wystarczającą ilość danych, aby twój interfejs był powolny, będzie. Również wszyscy programiści mają praktykę wykonywania operacji na bazie danych i sieci w wątku roboczym zamiast w wątku UI, więc nie zatrzyma to żadnej interakcji UI.
Proces odczytu i zapisu na dysku zajmuje więcej czasu niż proste tworzenie obiektu
Niestety mam do czynienia z dużą ilością danych !! Zamierzam poczekać, aż ta funkcja zostanie wywalczona przed wdrożeniem Królestwa –
Ile w Twoim przypadku jest "dużo"? – bmunk
@ChristianMelChior: Cześć. Czy Realm obsługuje niestandardowe zamówienia sortowania? Na przykład mam tabelę, która ma 3 pola: nazwę miejsca geograficznego, jego szerokość i długość geograficzną. Chcę posortować wynik w zależności od odległości od bieżącej lokalizacji (która będzie się różnić w zależności od lokalizacji użytkownika). Dzięki – Rajat