niedziela, maja 20, 2012

I jak "po bożemu" zrobić updatowanie widoku na podstawie danych z sieci w Androidzie?

Już trochę kodu dla Androida napisałem, ale nadal jest jedna rzecz której nie wiem.
Tzn. wiem jak to coś zrobić na wiele sposobów, ale nie wiem nadal jak to się powinno robić "po bożemu", albo zgodnie z księgą....

O co chodzi?

O banał.
Mamy aktywność, która np. wyświetla kurs akcji i chcemy co jakiś czas to zupdatować...

Zrobić to można na wiele sposobów.

Pierwszy, prosty z pozoru, choć bardzo zły i nieandroidowy to stworzyć sobie wątek, który pogada z siecią po czym wyświetlić.
Zaleta jest taka, że jest prosto, wad jest sporo.
Najistotniejsza taka, że jak nam ktoś w momencie gdy pytamy sieć zmieni orientację ekranu to aktywność zginie śmiercią tragiczną, a wątek zostanie i się dopiero wykrzaczy jak będzie próbował zrobić update na UI. Do tego odpowiednio kręcąc urządzeniem możemy sprawić, że będzie ono non-stop atakować serwery i prosić o dane, serwery będą ciągle to przysyłały, a user i tak nie zobaczy ;-)

Można też powołać do życia serwis, zarejestrować BroadcastReceiver, odpalić serwis i czekać. Serwis się z siecią połączy, pobierze dane, podeśle je do aktywności przez broadcast... oczywiście problem będzie znów jak ktoś nam zmieni orientację bo zarejestrowany BroadcastReceiver jest połączony z tą aktywnością która zginie.... Można by niby tutaj (i w poprzednim podejściu) dodać callbacka, a sam BroadcastReceiver zrobić statyczny.... ale też to takie sobie jest.

Można bawić się z serwisem i bindowaniem tego serwisu z aktywnością......

Można bawić się z ContentProviderem.

Można coś robić na poziomie aplikacji (taki singleton, który nam oferuje środowisko).....

I tylko problem jest taki, że nie wiem jak autorzy Androida chcieli by to załatwiać...

Ktoś wie? ;-)


Podobne postybeta
Google Play Services dobre jest :-)
Androidowe boje... ale nie takie morskie ;-)
O tym w czym iOS jest lepszy od Androida
Serwis dobry na wszystko ;-)
Wszyscy hackują Androida ;-)

1 komentarz:

  1. Napisz własny loader - http://developer.android.com/guide/topics/fundamentals/loaders.html Jeżeli tworzysz na wersję 2.x użyj Comatibility Library http://developer.android.com/sdk/compatibility-library.html

    Przed loaderami robiłem to ContentProvider i notyfikację zmiany danych w cursorze.

    OdpowiedzUsuń