Klasa Activity
to kluczowy komponent Androida.
oraz sposób uruchamiania i łączenia działań to podstawa
jako część modelu aplikacji platformy. W przeciwieństwie do paradygmatów programowania
które aplikacje są uruchamiane z użyciem metody main()
, system Android
system inicjuje kod w instancji Activity
przez
konkretne metody wywołania zwrotnego, które odpowiadają konkretnym etapom
cyklu życia usługi.
Przedstawiliśmy w nim pojęcie działań, a w dalszej części przedstawiliśmy podstawowe wskazówki dotyczące pracy z nimi. Więcej informacji o sprawdzonych metodach tworzenia architektury aplikacji znajdziesz w artykule patrz Przewodnik po architekturze aplikacji.
Pojęcie działań
Aplikacja mobilna różni się od jej wersji na komputery tym, interakcja użytkownika z aplikacją nie zawsze zaczyna się w tym samym miejscu. Zamiast tego ścieżka użytkownika często zaczyna się niedeterministycznie. Jeśli np. otworzysz aplikację do obsługi poczty na ekranie głównym, możesz zobaczyć ikonę listę adresów e-mail. Jeśli natomiast korzystasz z aplikacji do obsługi mediów społecznościowych, jeśli uruchomisz aplikację do poczty e-mail, możesz przejść bezpośrednio do ekranu aplikacji napisanego e-maila.
Klasa Activity
ma ułatwiać stosowanie tego schematu.
Gdy jedna aplikacja wywołuje drugą, ta wywołuje działanie w drugiej
aplikacji, a nie jej całościowej całości. W ten sposób aktywność służy jako
który jest punktem wejścia w interakcję aplikacji z użytkownikiem. Wdrożenie
activity jako podklasa klasy Activity
.
Aktywność to okno, w którym aplikacja rysuje jego UI. To okno zwykle wypełnia ekran, ale może być mniejsze niż i pływać nad innymi oknami. Zazwyczaj jedna aktywność implementuje jeden ekran w aplikacji. Na przykład jedno z działań w aplikacji może implementować ekran Preferencje, a inne stosować ekran Wybierz zdjęcie.
Większość aplikacji ma wiele ekranów, co oznacza, że składa się aktywności. Zazwyczaj jedno działanie w aplikacji jest określane jako główne activity, czyli pierwszy ekran, który wyświetla się po uruchomieniu aplikacji przez użytkownika. Każda aktywność może następnie rozpoczynać nowe działanie w celu wykonywać różne działania. Na przykład główna aktywność w zwykłym e-mailu aplikacja może udostępnić ekran, na którym wyświetla się skrzynka odbiorcza. Następnie główny element aktywność może uruchamiać inne działania, w których wyświetlane są ekrany zadań, na przykład pisania e-maili i otwierania poszczególnych e-maili.
Choć działania razem tworzą spójną całość w aplikacji, każda aktywność jest tylko luźno powiązana z innymi działaniami; jest zazwyczaj minimalnych zależności między działaniami w aplikacji. aktywność często inicjuje działania należące do innych aplikacji. Przykład: przeglądarka może uruchomić aktywność udostępniania w aplikacji mediów społecznościowych.
Aby korzystać z aktywności w aplikacji, musisz zarejestrować informacje o nich w z manifestu aplikacji i musisz odpowiednio zarządzać cyklami życia działań. Zagadnienia te zostały omówione w pozostałej części tego dokumentu.
Konfigurowanie pliku manifestu
Aby aplikacja mogła korzystać z aktywności, musisz je zadeklarować. i niektórych ich atrybutach.
Deklarowanie aktywności
Aby zadeklarować aktywność, otwórz plik manifestu i dodaj atrybut <activity> – jako element podrzędny tagu <aplikacja> . Na przykład:
<manifest ... > <application ... > <activity android:name=".ExampleActivity" /> ... </application ... > ... </manifest >
Jedynym wymaganym atrybutem tego elementu jest android:nazwa, , która określa nazwę klasy aktywności. Możesz też dodać atrybuty które określają cechy aktywności, np. etykietę, ikonę lub motyw interfejsu. Więcej informacji o tych i innych atrybutach znajdziesz w artykule <activity> dokumentacji elementów.
Uwaga: po opublikowaniu aplikacji: nie zmieniaj aktywności nazw. Może to spowodować uszkodzenie niektórych funkcji, np. skrótów do aplikacji. Więcej informacji o zmianach, których należy unikać po opublikowaniu, znajdziesz w artykule To, co nie może się zmienić.
Deklarowanie filtrów intencji
Filtry intencji to bardzo przydatna funkcja platformy Androida. Ta które umożliwia uruchomienie działania opartego nie tylko na jawne, ale też niejawne. Przykład: wyraźne żądanie może nakazać systemowi „rozpoczęcie wysyłania wiadomości e-mail”. w aplikacji Gmail”. Z kolei żądanie niejawne informuje „Uruchom ekran Wyślij e-maila w dowolnym które mogą wykonać zadanie”. Gdy interfejs systemu pyta użytkownika, której aplikacji użyć podczas wykonywania zadania – jest to w praktyce filtr intencji.
Aby skorzystać z tej funkcji, deklaruj <filtr-intent> w <activity>. Definicja tego elementu zawiera <action>, opcjonalnie <category> element lub <data> . Te elementy połącz, aby określić typ zamiaru, na który może odpowiedzieć Twoja aktywność. Dla: z tego fragmentu kodu dowiesz się, jak skonfigurować aktywność, która wysyła dane tekstowe i otrzymuje w tym celu żądania od innych działań:
<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon"> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> </activity>
W tym
przykładowej funkcji <action>
określa, że ta aktywność wysyła dane.
Deklarowanie atrybutu <category>
jako element DEFAULT
włącza działanie
do otrzymywania próśb o wprowadzenie na rynek. Parametr <data>
określa typ danych,
ta aktywność może wysyłać wiadomości. Fragment kodu poniżej pokazuje, jak wywoływać metodę
opisana powyżej czynność:
Kotlin
val sendIntent = Intent().apply { action = Intent.ACTION_SEND type = "text/plain" putExtra(Intent.EXTRA_TEXT, textMessage) } startActivity(sendIntent)
Java
// Create the text message with a string Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.setType("text/plain"); sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage); // Start the activity startActivity(sendIntent);
Deklarowanie uprawnień
Pliku manifestu możesz użyć za pomocą
Tag <activity>
do sterowania
aplikacje, które mogą rozpoczynać określoną aktywność. Działanie rodzica nie może uruchomić
aktywności dziecka, chyba że obie mają takie same uprawnienia
pliku manifestu. Jeśli zadeklarujesz
<uses-permission>
dla aktywności nadrzędnej, każda aktywność podrzędna musi mieć
.
<uses-permission>
,
.
Na przykład, jeśli aplikacja chce używać hipotetycznej aplikacji o nazwie SocialApp aby udostępnić posta w mediach społecznościowych, aplikacja SocialApp musi definiować uprawnienia które aplikacja musi mieć:
<manifest> <activity android:name="...." android:permission=”com.google.socialapp.permission.SHARE_POST” />
Następnie, aby móc wywoływać SocialApp, aplikacja musi spełniać warunki uprawnień Plik manifestu aplikacji SocialApp:
<manifest> <uses-permission android:name="com.google.socialapp.permission.SHARE_POST" /> </manifest>
Więcej informacji o uprawnieniach i zabezpieczeniach znajdziesz w Zabezpieczenia i uprawnienia.
Zarządzanie cyklem życia aktywności
W ciągu swojego życia aktywność przechodzi przez kilka stanów. Do obsługi przejść między stanami używa się serii wywołań zwrotnych. W poniższych sekcjach wprowadzić te wywołania zwrotne.
onCreate()
Musisz zaimplementować to wywołanie zwrotne, które jest wywoływane, gdy system utworzy
działania. Implementacja powinna zainicjować kluczowe komponenty
Twojej aktywności: np. aplikacja powinna tworzyć widoki danych i wiązać dane z
tutaj. Co najważniejsze, w tym miejscu należy zadzwonić
setContentView()
do zdefiniowania układu interfejsu aktywności.
Gdy zakończy się działanie funkcji onCreate()
,
następne wywołanie zwrotne to zawsze onStart()
.
onStart()
Po wyjściu z aplikacji onCreate()
aktywność
przechodzi w stan rozpoczęcia, a aktywność staje się widoczna dla użytkownika.
Wywołanie zwrotne zawiera wynik ostatecznych przygotowań do wykonania działania
wychodziły na pierwszy plan
i stały się interaktywne.
onWznów()
System wywołuje to wywołanie zwrotne tuż przed rozpoczęciem interakcji.
z użytkownikiem. W tym momencie aktywność znajduje się na jej początku
i rejestruje wszystkie dane wejściowe użytkownika. Większość kluczowych funkcji aplikacji
zaimplementowane w metodzie onResume()
.
Zawsze dostępne wywołanie zwrotne onPause()
obserwuje: onResume()
.
onPause()
System wywołuje onPause()
, gdy aktywność zniknie
zaznaczenie i przechodzi w stan wstrzymania. Ten stan występuje, gdy na przykład użytkownik
klika przycisk Wstecz lub Ostatnie. Gdy system wywoła
onPause()
za Twoją aktywność,
technicznie oznacza to, że Twoja aktywność jest wciąż częściowo widoczna, ale najczęściej wskazuje na to,
użytkownik opuszcza aktywność i wkrótce zostanie ona umieszczona w
Stan zatrzymany lub wznowiony.
Działanie, które jest w stanie wstrzymania, może nadal aktualizować interfejs, jeśli użytkownik oczekuje aktualizacji interfejsu. Przykładem takiej aktywności może być wyświetlenie nawigacji na ekranie mapy lub w odtwarzaczu. Nawet jeśli takie działania stracą koncentrację, użytkownik oczekuje, że interfejs użytkownika będzie nadal aktualizowany.
Nie należy używać:
onPause()
, aby zapisać aplikację lub użytkownika
do analizy danych,
wykonywać wywołania sieciowe i wykonywać transakcje w bazie danych.
Informacje na temat oszczędzania danych można znaleźć w sekcji
Zapisywanie i przywracanie stanu aktywności.
Gdy onPause()
zakończy wykonywanie,
następne wywołanie zwrotne to onStop()
lub
onResume()
, w zależności od
ma miejsce, gdy aktywność przejdzie w stan wstrzymania.
onStop()
System wywołuje metodę onStop()
, gdy
aktywność nie jest już widoczna dla użytkownika.
Może się tak zdarzyć, gdy działanie jest niszczone,
lub rozpoczyna się istniejąca aktywność
ma stan Wznowiono i obejmuje zatrzymaną aktywność.
We wszystkich tych przypadkach zatrzymana aktywność nie jest już
w ogóle nie są widoczne.
Kolejne wywołanie zwrotne, które wywołuje system, to
onRestart()
, jeśli
aktywność powraca i wchodzi w interakcję z użytkownikiem,
onDestroy()
jeśli ta aktywność zostanie całkowicie zakończona.
onRestart()
System wywołuje to wywołanie zwrotne, gdy działanie w stanie zatrzymania to
który zaraz się uruchomi. onRestart()
przywraca stan aktywności z chwili jej zatrzymania.
Po tym wywołaniu zawsze następuje:
onStart()
onDestroy()
System wywołuje to wywołanie zwrotne przed zniszczeniem działania.
Jest to ostatnie wywołanie zwrotne od aktywności.
onDestroy()
to
zwykle wdrażane, by zapewnić, że wszystkie zasoby działania są
zwolniony po zniszczeniu działania lub obejmującego go proces.
Ta sekcja zawiera jedynie wprowadzenie do tego tematu. Więcej szczegółowe omówienie cyklu życia aktywności i jego wywołań zwrotnych, Więcej informacji: Aktywność Cykl życia.