sobota, października 27, 2012

Wszyscy hackują Androida ;-)

Byłem dziś na drugim dniu konferencji JDD (ogólnie słabo było, w tamtym roku na GeeCON było dużo lepiej).
Była tam prezentacja z Androida. Takie podstawy o tym jak zacząć.
Trochę przerażającym wnioskiem z tej prezentacji jest to, że moje hacki, których używałem i używam w Bloggeroidzie to niestety normalna praktyka i nie wynikają z mojego niedouczenia, a po prostu system tego wprost nie wspiera ;-)
O co chodzi?
Np. o to, że ponieważ w momencie obrócenia ekranu system killuje aktywność to wszelkie wątki czy AsyncTaski tracą kontakt z aktywną aktywnością. Nadal mają referencję do tej starej, ale ona już nie jest używana przez system ;-)
No i wszyscy to próbują jakoś hackować ;-)

Trochę to przerażające ;-)


Podobne postybeta
Nexus 7 wymiata
O tym w czym iOS jest lepszy od Androida
I jak "po bożemu" zrobić updatowanie widoku na podstawie danych z sieci w Androidzie?
Bloggeroid 1.2 - zróbmy to ciut bardziej przewidywalne ;-)
OpenOffice.org - ulubiony pakiet biurowy Java'owca ;p

7 komentarzy:

  1. Czy na pewno?

    Dużo z Androidem nie eksperymentowałem, ale api wyraźnie opisuje obsługę zmiany orientacij ekranu. Odpowiednia deklaracja i aktywność nie powinna być restartowana...

    OdpowiedzUsuń
    Odpowiedzi
    1. @Red na pewno ;-)
      Jeżeli zablokujesz reagowanie na obrót to po prostu nie będzie się obracać, a nie o to chodzi :-)
      Jeżeli odświeżam listę czegoś z sieci i użytkownik odwraca ekran to chcę zmienić jego orientację, ale chciałbym też nadal mieć kontakt z tym co ściąga dane z sieci. A Android nie daje prostego mechanizmu do tego i każdy kombinuje po swojemu. A to np. wrzuca to do serwisu i serwis coś wrzuca do bazy danych, a to wrzuca znów do content providera i tak dalej. Są to jakieś sposoby, ale zwykle niezbyt wygodne i przez to wszyscy hackują ;-)

      Usuń
  2. Wybacz jesli moja odpowiedz bedzie mylaca,

    wzialem na tapete typowe helloworld i przetestowalem z uzyciem logcat, ale wydaje mi sie ze aktwynosc _nie_ zostala zrestartowana gdy obracalem ekran.

    Do manifestu dodalem cos takiego:

    <activity
    + android:configChanges="orientation"

    Nastepnie w aktywmosci dodalem:

    public void onConfigurationChanged(Configuration newcfg) {
    Log.i("szsz", "CHANGE");
    super.onConfigurationChanged(newcfg);
    }

    Calosc zdaje sie dzialac tak jak przewiduje. Zadnych restartow nie zauwazylem, ale poniewaz ekspertmentuje wlasnie z pisaniem aplikacji wprost na tablecie, to nie mam 100% pewnosci..

    ps.
    Z tego samego powodu brakuje w mojej odpowiedzi polskich znaczkow... Zabawnie pisze sie uzywajac zewnetrznej klawiatury - niestety zachowanie systemu chwilami odbiega od przyzwyczajen...

    OdpowiedzUsuń
  3. @Red - zareagowała na obrócenie ekranu? [znaczy czy się przystosowała do obrotu?]
    Bo z tego co widzę u siebie to na 1.6 ani 2.2 w ogóle nie reaguje, tzn. w 1.6 po prostu wyświetla się ciągle tak samo (czyli jest w pewnym momencie "na odwrót"), w 2.2 psuje zaś ekran i nic nie widać.
    W 4.1 wydaje się reagować prawidłowo, czyli przerysowuje ekran, tu wadą jest to, że trwa to dłużej niż normalnie.
    Na 2.3.1 znów tak samo jak na 1.6 w ogóle nie reaguje.
    Znaczy, że w 4.1 już to działa jak powinno (choć wolno), ale wcześniej nie działało.
    Ja wspieram od 1.5 w górę, w planach mam porzucenie linii 1.x ;-)

    OdpowiedzUsuń
    Odpowiedzi
    1. Dzieki opieszalosci LG wciaz moge testowac na 2.3.5. Podobnie jak pod 4.0, wszystko dziala zgodnie z oczekiwaniami (tzn nie bylo onCreate przy obracaniu ekranu).

      Co do szybkosci sie nie wypowiem, LinearLayout i TextArea, poprostu nie stanowia zadnego wyzwania... Tym bardziej ze oba urzadzenia trudno nazwac powolnymi.

      Usuń
    2. Ja mam ciut bardziej zaawansowany layout.
      Ale to szczegół, sprawa wygląda tak, że to co polecasz może działać, ale nie musi, a to raczej nie jest rozwiązanie.
      Stąd wszyscy hackują by to działało wszędzie i zawsze.

      Usuń
  4. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń