Portál AbcLinuxu, 24. května 2024 00:14


Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Vložit další komentář
5.5.2011 08:32 Honza
Rozbalit Rozbalit vše Re: Vývoj pro Android – vylepšujeme aktivity
Odpovědět | Sbalit | Link | Blokovat | Admin
AsyncTask pouzivam velice casto a k nemu se vaze muj dotaz. V metode postExecute potrebuji zobrazit dialog se zpravou o probehle akci. Vse funguje samozrejme v poradku, pokud uzivatel zustane v te same aktivite, ve ktere byl AsyncTask spusten, protoze do konstruktoru AsyncTasku posilam referenci na tu Activitu. Pokud ale uzivatel prejde do jine activity (coz je vice nez pravdepodobne), pak context aktivity uz neni platny a aplikace spadne. Proto misto dialogu pouzivam Toast, nebo popripade vypisuji zpravy do Notifikacniho pruhu. Poradil by mi nekdo, jak docilit toho, aby zobrazeni Dialogu nezpusobilo pad aplikace a aby se dialog pokud mozno zobrazil i na plose (pokud uzivatel opusti uplne aplikaci)?
5.5.2011 08:37 Honza
Rozbalit Rozbalit vše Re: Vývoj pro Android – vylepšujeme aktivity
mam samozrejme na mysli onPostExecute()
tmr avatar 5.5.2011 22:24 tmr | skóre: 17 | blog: Offtopic | Praha 5
Rozbalit Rozbalit vše Re: Vývoj pro Android – vylepšujeme aktivity

Tohle je jedna z věcí, kterou má Android naprosto špatně navrženou. Neexistuje žádný standardní postup, jak řešit čistě a bez bugu provádění kódu na pozadí s následným updatem UI. Problémy s AsyncTaskem jsou 2:

  1. AsyncTask má odkaz na Activity. Při otočení telefonu na šířku se Activity restartuje, ale AsyncTask má odkaz na tu starou Activity. Takže v paměti jsou 2 a jedna z nich zbytečně. Když AsyncTask skončí a chce zobrazit výsledek, nefunguje to, protože nemá odkaz na novou Activity.
  2. Dejme tomu, že mám Activity, která zabírá hodně paměti a v onCreate() spustí AsyncTask. Když několikrát převrátím telefon, Activity se několikrát restaruje a vytvoří několik AsyncTasku. Kazdy bude mít odkaz na tu svou Activity, takže se postupně zaplní paměť a skončí to OutOfMemoryError-em.

Oba problémy se zdaleka netýkají jenom otáčení displeje, to je jenom nejčastější případ.

Já jsem AsyncTasky přestal používat a pro práci na pozadí používám vlastní třídy Task (obdoba AsyncTask) a AbstractActivity (například udržuje informace o běžících Tascich).

8.11.2011 16:00 Mira
Rozbalit Rozbalit vše Re: Vývoj pro Android – vylepšujeme aktivity
Nenastinil by jsi prosim jak tebou zminovany problem resis, pomoci te sve vlastni tridy?

Moc dik
6.5.2011 02:05 Tomáš Kypta
Rozbalit Rozbalit vše Re: Vývoj pro Android – vylepšujeme aktivity
Pokud chcete dialog, který není vázán na konkrétní aktivitu nebo se umí zobrazit na ploše, budete ho muset vytvořit z vlastní aktivity. Tu zobrazíte s dialogovým stylem.
8.5.2011 20:22 Jakub
Rozbalit Rozbalit vše Vlakna jejich stavy
Odpovědět | Sbalit | Link | Blokovat | Admin
Zdravim,

mam banalni dotaz ale ani v dokumentaci jsem nenasel odpoved.

Je mozne mit v Androidi aplikaci vlakno(extend Thread) a provadet na nem nasledujici 3 veci?
  1. Pozastavit
  2. Spustit(nechat ho pokracovat z pozastaveneho mista)
  3. Dotazat se zda je bezici, pozastavene nebo mrtve?
Diky moc Kuba.
tmr avatar 8.5.2011 23:43 tmr | skóre: 17 | blog: Offtopic | Praha 5
Rozbalit Rozbalit vše Re: Vlakna jejich stavy

Nejde to. Muzes ale tomu threadu rict, ze chces aby se pozastavil. A v tom threadu budes cas od casu kontrolovat, jestli je pozadavek na pozastaveni, a kdyz je tak se zastavis. Z jineho threadu potom muzes ten thread zase probudit.

P.S. Na co to potrebujes?

10.5.2011 10:09 Jakub
Rozbalit Rozbalit vše Re: Vlakna jejich stavy
Ahoj,

diky za odpoved - kterou jsem nechtel slyset.

Mam tridu ktera mi spravuje tasky(nacitani obrazku po siti). Porad dokola kontroluje jestli nepribyl novy task, pokud task pribyl zkontroluje jestli je volno(jiny jeste nebezi) a pokud je, tak ho spusti.

Zpusob jak to resit je, pres zamky. Do toho se mi ale moc nechce :(.

Je primo v androidovi nejaka komponenta o ktere nevim a pomohla by mi?

Diky za pomoc.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.