18 września 2011

Czym jest android.content.Intent oraz android.app.Activity?

Kiedy analizowałem aplikację na Androida, spotykałem się zwykle z klasą android.content.Intent. Wszędzie było jej pełno. Na tyle dużo, aby zwróciła moją uwagę i postanowiłem doczytać, jaka jest jej właściwie rola. Śmiem twierdzić, że jest jedną z bardziej ważnych (jeśli nie najważniejszych) klas w Androidzie.

Już pierwsze zdanie w dokumentacji javadoc dla android.content.Intent wyjaśniło znaczenie klasy:
"An intent is an abstract description of an operation to be performed."
Śmiało możemy przetłumaczyć Intent na jego najbliższy odpowiednik w polskim - zamiar, bo każdorazowe utworzenie Intent będzie wyrażało zamiar wykonania pewnej operacji. W takiej formie widziałem ją w "Hello, Android", kiedy to zamiar wyświetlenia (uruchomienia) android.app.Activity był związany ze stworzeniem obiektu Intent.

Pewnie zastanawiasz się, po co chciałbym wyświetlić Activity? I ponownie wystarczy zajrzeć do dokumentacji, aby dowiedzieć się o jej roli:
"An activity is a single, focused thing that the user can do. Almost all activities interact with the user, so the Activity class takes care of creating a window for you in which you can place your UI with setContentView(View)."
Jeśli dodać, że obie klasy są częścią platformy od wersji 1.0, to staje się jasne, skąd tego tyle w aplikacjach androidowych, z którymi miałem do czynienia do tej pory (przede wszystkim podczas lektury "Hello, Android"). Najczęściej moje spotkanie z obiema klasami miało postać:
Intent i = new Intent(this, A.class);
startActivity(i);
gdzie this wskazuje na klasę dziedziczącą po android.app.Activity, a A.class nową Activity, która zostanie umieszczona na stosie ekranów prezentowanych użytkownikowi.

Pamiętajmy, że każda aktywność uruchomiona przez metodę android.content.Context.startActivity(Intent intent) musi być zarejestrowana przez w AndroidManifest.xml.

I krótka aplikacja do odpalenia na własnym smartfonie - wystarczy podać własne imię, aby pojawiło się przywitanie. Jest to ten typ aplikacji, którą moglibyśmy śmiało nazwać "Hello World". Kompletny projekt, gotowy do importu do Eclipse, znajduje się w repozytorium android-examples/Powitanie. Proszę o uwagi, które mógłyby pomóc mi w udoskonaleniu aplikacji.

A może masz pytania o Androidzie, na które mógłbym odpowiedzieć? Może sugestie, w jakim kierunku powinienem zmierzać z moim rozpoznawaniem Androida? Ten typ nauki najbardziej mi odpowiada - czytelnicy pytania, a ja odpowiedzi, albo wersja bardziej interaktywna - uczestnicy spotkania pytania, a ja w roli prelegenta z odpowiedziami. Już mnie kręci na zaprezentowanie swojej dotychczasowej wiedzy na spotkaniu Warszawa JUG. To mogłoby zachęcić przyszłych i aktualnych androidowiczów do spotkania i podzielenia się doświadczeniami. Tego mi trzeba. Niedługo (tydzień, dwa) rodzi się kolejny Laskowski i muszę zintensyfikować naukę, póki "wolny czas" to nie coś wirtualnego :-)