Czas podsumować konkurs “Daj się poznać 2017”

Znalezione obrazy dla zapytania coding wallpaper

Cześć, czas na podsumowanie tego co się działo przez ostatnie 10 tygodni! 12 marca rozpocząłem prowadzenie tego bloga w ramach konkursu. Opisywałem tutaj moje pierwsze kroki stawiane w Android Studio. Celem jaki sobie postawiłem, było stworzenie aplikacji mającej na celu informowanie o nadchodzących odcinkach ulubionych seriali. Nie miałem konkretnych wytycznych, którymi kierowałem się przez okres trwania konkursu. Starałem się robić coś, z czego sam chętnie bym korzystał. Nie wszystkie założenia, które sobie założyłem udało się spełnić. Za największy problem uważałem stworzenie bazy danych. Na ten moment aplikacja nie korzysta z żadnej bazy danych, a wszystkie dane przechowywane są w tablicach. Nie jest to najlepsze rozwiązanie i świetnie zdaję sobie z tego sprawę. Jednak z czasem tworzenia aplikacji, starałem się skupiać nauce nowych rzeczy w Android Studio niż uzupełnianiem bazy danych serialu.

Udało się stworzyć aplikację złożonej z 3 głównych aktywności:

  • Główna aktywność zawiera listę seriali. Lista ta przechowuje logo, nazwę oraz datę emisji serialu.
  • Dane szczegółowe serialu – do tej aktywności przenosimy się za pomocą naciśnięcia na element listy seriali. Zawiera ona logo, nazwę, datę emisji kolejnego odcinka oraz jego krótki opis.
  • Trzecia aktywność – nazwana została Top 5. Przechowuje ona widok listy 5 najpopularniejszych seriali. Wykorzystałem do niej widok RecyclerView. Przedstawiony jest  w wersji horyzontalnej i zawiera zdjęcie oraz tytuł serialu.

Konkurs Daj się poznać polecam każdemu, kto ma trochę wolnego czasu i chcę go spożytkować na własny rozwój! 3 miesiące temu nie potrafiłem nic stworzyć wykorzystując do tego Android Studio. Po upływie tego czasu mogę pochwalić się własną aplikacją napisaną od zera. Mam nadzieję, że w przyszłym roku również uda się wystartować.

A Ty jeśli zastanawiasz się czy warto – to moim zdaniem, absolutnie tak, na pewno nie masz nic do stracenia, a zyskać można naprawdę wiele!  Smile

Series Reminder – top 5 seriali

Cześć, dzisiaj post o dodaniu listy 5 najlepszych seriali wszechczasów. Początkowo FloatingActionButton miał służyć do przejścia do aktywności z ulubionymi serialami, jednak stwierdziłem, że zamiast tego stworzę listę 5 najlepszych seriali, wykorzystując do tego RecyclerView. Jest to widżet umożliwiający wielokrotne używanie widoków, a prezentowana zawartość ma postać listy. 

Pierwszym krokiem jaki należy wykonać to dodanie bibliotek do projektu. W tym celu należy przejść do Gradle Scripts –> build.gradle (Module: app) i dodać poniższe 2 linijki kodu:

compile 'com.android.support:cardview-v7:24.2.1'
compile 'com.android.support:recyclerview-v7:24.2.1'

Warto zauważyć, że CardView oraz RecyclerView musi być kompatybilne z naszą wersją SDK.

Następnie w docelowej aktywności dodajemy RecylerView, u mnie prócz  niego znajduje się również Toolbar z tytułem “Top 5”.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.konrad.seriesreminder.FavouriteActivity">

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:subtitle="@string/favourite"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark" />

<android.support.v7.widget.RecyclerView
android:id="@+id/recyler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/toolbar3" />



</RelativeLayout>

Następnie w docelowej aktywności dodajemy RecylerView, RecylerView.LayoutManager oraz RecylerView.Adapter. Prócz tego na potrzeby 5 najlepszych seriali stworzyłem dwie ArrayListy, jedna przechowuje nazwy seriali, natomiast druga ich loga. Kompletny kod aktywności wklejam poniżej (więcej informacji znajdziecie na stronie KLIK ):

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_favourite);

Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar3);
mToolbar.setTitle(R.string.top5);

topSeries = new ArrayList<>();

topSeries.add("Game of Thrones");
topSeries.add("Breaking Bad");
topSeries.add("Band of Brothers");
topSeries.add("Sherlock");
topSeries.add("House of Cards");


topLogos = new ArrayList<>();

topLogos.add(R.drawable.game_of_thrones1);
topLogos.add(R.drawable.breaking_bad1);
topLogos.add(R.drawable.band_of_brothers1);
topLogos.add(R.drawable.sherlock1);
topLogos.add(R.drawable.house_of_cards1);

mRecyclerView = (RecyclerView) findViewById(R.id.recyler_view);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new RecyclerAdapter(topSeries, topLogos);
mRecyclerView.setAdapter(mAdapter);
}
}

Po dokonaniu zmian w aktywności musimy jeszcze stworzyć nowy layout, który będzie przedstawiał widok pojedynczego serialu. U mnie będzie składał się on z jednego TextView oraz jednego ImageView.

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/title"
android:textSize="36dp"
android:textColor="#000"
android:shadowColor="@color/colorPrimaryDark"
android:shadowDx="3"
android:shadowDy="3"
android:shadowRadius="10"
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

<ImageView
android:id="@+id/imageView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@mipmap/ic_launcher"
android:layout_marginBottom="29dp"
android:layout_above="@+id/title"
android:layout_centerHorizontal="true" />
</RelativeLayout>

</android.support.v7.widget.CardView>

Ostatnim krokiem jest stworzenie Adaptera, który będzie przekazywał dane z ArrayListy do widoków:

class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {

private ArrayList<String> topSeries;
private ArrayList<Integer> topLogos;



public RecyclerAdapter(ArrayList<String> topSeries, ArrayList<Integer> topLogos) {
this.topSeries = topSeries;
this.topLogos = topLogos;


}

@Override
public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.row, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;

}

@Override
public void onBindViewHolder(RecyclerAdapter.ViewHolder holder, int position) {
holder.mTitle.setText(topSeries.get(position));
holder.mView.setImageResource(topLogos.get(position));
}

@Override
public int getItemCount() {
return topSeries.size();

}

public class ViewHolder extends RecyclerView.ViewHolder{

public TextView mTitle;
public ImageView mView;

public ViewHolder(View itemView) {
super(itemView);
mTitle = (TextView) itemView.findViewById(R.id.title);
mView = (ImageView) itemView.findViewById(R.id.imageView3);
}
}
}

Po wykonaniu powyższych kroków moja aplikacja Series Reminder po naciśnięciu FloatingActionButton’a wygląda następująco:

image

image

Konkurs “Daj się poznać 2017” zbliża się ku końcowi. Jutro czas na podsumowanie tego co udało się zrobić w przeciągu ostatnich 3 miesięcy! Do zobaczenia. Smile

Magic tricks – czyli skróty klawiszowe w Android Studio

Cześć, jeśli chciałbyś programować efektywniej powinieneś poznać skróty klawiszowe środowiska w którym pracujesz. Dlatego też dzisiaj post o skrótach klawiszowych w Android Studio. Pomogą one przyśpieszyć proces powstawania kodu! Zaczynajmy! Smile

Ctrl + Spacja  – czyli uzupełnianie kodu, dzięki niemu wyświetlona zostanie lista sugestii, której zawartość jest ściśle związana z tym co w danej chwili piszemy.  Po liście sugestii poruszamy się za pomocą strzałek góra i dół, natomiast dla zatwierdzenie wystarczy kliknięcie klawisza Enter.

Ctrl + Shift + Spacja– czyli inteligentne wpisywanie, dzięki niemu w czasie wpisywania np. parametru typu String, edytor w liście sugestii wyświetli jedynie obiekty typu String.

Ctrl + Shift + Enter – czyli uzupełnienie instrukcji, dzięki niemu po wpisaniu instrukcji i skorzystaniu z tego skrótu, wszystkie pozostałe elementy instrukcji zostaną automatycznie dodane do kodu.

Alt + Enter –  czyli podpowiedzi kontekstowe,  w zależności od kontekstu po użyciu tego skróty wyświetlone zostaną różne możliwości.

Alt + Insert – czyli generowanie kodu, dzięki niemu możemy wygenerować gettery, settery, konstruktory oraz metody equals oraz toString, a także przesłaniać i delegować metody.

Ctrl + / – skrót pozwalający na umieszczenie na wiersza symbolu komentarza “//”.

Ctrl + D – skrót dzięki, któremu skopiujemy zaznaczony fragment kodu i wkleimy go poniżej.

Ctrl + Y – skrót, usuwający cały wiersz kodu, nie pozostawiając pustego wiersza.

psf – skrót do formatowania na public static final.

Aby jak najrzadziej korzystać z  myszki nie obejdzie się również bez poznania i zapamiętania skrótów klawiszowych pozwalających na poruszanie się między oknami i zakładkami.

Alt + 1 – skrót ten pozwala na przejście do drzewa projektu.

Esc –  w momencie gdy jesteśmy w drzewie projektu, wciśnięcie klawisza escape spowoduje powrót do okna z kodem.

Alt + strzałka w lewo/prawo – skrót ten pozwala na zmianę aktywnej zakładki na poprzednią lub następną.

Ctrl + Tab – skrót, pozwalający na wybór okna.

2 x Shift – skrót ten umożliwia znalezienie dowolnego elementu kodu źródłowego, baz danych, elementów interfejsu itp.

Tyle skrótów chyba powinno wystarczyć na efektywniejszą pracę w Android Studio. Mam nadzieję. że komuś z Was się to przyda, mnie na pewno! Cześć!

Series Reminder – make some toasts

Cześć, ostatnio dodałem przycisk typu CheckBox do głównej listy seriali. Dzisiaj czas na wyświetlenie krótkiego komunikatu tekstowego po naciśnięciu wcześniej stworzonego CheckBox’a. Komunikaty te nazywane są tostami (ang. toast) i mają charakter informacyjny, co oznacza, żeużytkownik nie może prowadzić z nimi żadnych interakcji. Implementowane są tylko i wyłącznie w kodzie aktywności. W moim przypadku będzie to aktywność MainActivity, w której zawiera się lista wszystkich seriali. Przed stworzeniem metody Toast.makeText(), muszę stworzyć fragment kodu odpowiedzialny za obsługę CheckBox’a. W kodzie XML jest już wszystko zrobione, zostało to opisane w poprzednim poście. Dzisiaj zajmę się metodą obsługująca kliknięcia. W głównej aktywności musimy stworzyć metodę onCheckBoxClicked. Jej kod wklejam poniżej:

    public void onCheckBoxClicked (View view){
boolean checked = ((CheckBox) view).isChecked();
switch (view.getId()){
case R.id.checkBoxFavourite:
if (checked){
}
else{
}
break;
}
}

Zawiera ona instrukcję switch, w której należy założyć co się stanie w momencie zaznaczenia i odznaczenia CheckBoxa. Ja chciałbym aby w momencie zaznaczenia wyświetlił się komunikat “Added to favourite series”, natomiast, gdy użytkownik zechcę odznaczyć daną pozycję wyświetli się komunikat “Removed from favourite series”. Metoda Toast.makeText() wymaga przekazanie trzech parametrów: obiektu Context (zazwyczaj w postaci referencji do bieżącej aktywności), obiektu CharSequence zawierającego treść komunikatu oraz liczby typu int określającej jak długo dany komunikat ma się wyświetlać. Po połączeniu metody Toast.makeText() oraz metody onCheckBoxClicked uzyskujemy poniższy fragment kodu:

    public void onCheckBoxClicked (View view){
boolean checked = ((CheckBox) view).isChecked();
switch (view.getId()){
case R.id.checkBoxFavourite:
if (checked){
CharSequence text = "Added to favourite series!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(this, text, duration);
toast.show();
    }
else{
CharSequence text = "Removed from favourite series!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(this, text, duration);
toast.show();
}
break;
}
}

A jak to wygląda w aplikacji?

Dodanie do listy ulubionych seriali:

image

Usunięcie z listy ulubionych seriali:

image

To wszystko na dzisiaj. Do zobaczenia jutro! Smile

Czas na dodanie checkBox’a

Witajcie, dzisiaj dość krótki i przyjemny post o dodaniu checkBox’a. Chciałbym aby pojawił się on przy każdym serialu i miał za zadanie dodanie go do naszej listy ulubionych seriali w aktywności FavouriteActivity. Dzisiaj zajmę się tylko dodaniem owego przycisku, natomiast jego funkcjonalność dodam w przyszłym tygodniu.

No to zaczynamy.

Series Reminder składa się z 3 aktywności: MainActivity, FavouriteActivity oraz DetailActivity. MainActivity zawiera listę wszystkich seriali, FavouriteActivity – jak na razie jest puste, ale docelowo znajdować się tam będą wszystkie seriali, które użytkownik doda do ulubionych za pośrednictwem przycisku typu checkBox. Ostatnia aktywność to DetailActivity, która zawiera szczegóły serialu na który klikniemy.

CheckBox znajdować się będzie po prawej stronie serialu i opisany zostanie jako Favourite. Aby go dodać, należy przejść do odpowiedniego layout’u, w moim przypadku będzie to listview_item.xml, które przed dodaniem chechBox’a wygląda tak:

image

listview_item.xml składa się z RelativeLayout’u w którym znajduje się imageView oraz 3 pola textView. Aby dodać checkBox’a najpierw stworzyłem ContraintLayout, a następnie wstawiłem przycisk. Zmieniłem również nazwę z domyślnej “CheckBox” na “Favourite”. Cały kod wklejam poniżej:

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginRight="8dp"
        android:layout_marginTop="24dp"
        android:text="@string/favourite1"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

Po włączenie emulatora smarfona Nexus 5 moja aplikacja wygląda następująco:

image

Na dzień dzisiejszy to już wszystko. Zapraszam w przyszłym tygodniu. Cześć! Smile

Obrót urządzenia kasuje wpisane dane! Jak sobie z tym poradzić?

Cześć, w ubiegłym tygodniu pisałem na temat cyklu życia aktywności. Nawiązując do tego tematu, chciałbym poruszyć kwestię obrotu urządzenia np. z układu pionowego na poziomy. W androidowych aplikacjach bardzo często mamy do czynienia z problemami po obróceniu urządzenia. Problemy te często nie są wykrywane w czasie testowania aplikacji na emulatorze. Związane są one z ponownym wywołaniem metody onCreate() w momencie, gdy Android wykryje zmianę orientacji urządzenia. Istnieją dwa sposoby na rozwiązanie tego problemu. Postaram się je przybliżyć poniżej.

Zacznijmy od początku. Co jest przyczyną błędu, w momencie obrotu urządzenia?

Przedstawmy ten problem na przykładzie aplikacji stopera. Pierwszym krokiem jest włączenie przez użytkownika aplikacji i rozpoczęcie działania stopera. Metoda runTimer() rozpoczyna inkrementację liczby sekund wyświetlanych poprzez widok tekstowy o identyfikatorze time_view, który wykorzystuje do tego celu dwie zmienne: seconds i running. W tym momencie dochodzi do obrotu urządzenia przez użytkownika. Android zauważa, iż nastąpiła zmiana orientacji urządzenia i wielkości ekranu – co prowadzi do usunięcia działającej aktywności, włącznie z używanymi zmiennymi, używanymi przez metodę runTimer(). Kolejnym etapem jest ponowne utworzenie aktywności StopwatchActivity. Metoda onCreate() aktywności zostaje wykonana ponownie, czego następstwem jest wywołanie metody runTimer(). Ponowne utworzenie aktywności skutkuje przyjęciem przez zmienne seconds i running wartości domyślnych.

W momencie uruchomienia aplikacji i rozpoczęcia wykonywania aktywności przez Androida, uwzględniana jest konfiguracja urządzenia. Obejmuje ona zarówno konfigurację fizycznego urządzenia (tj. wielkość ekranu, jego orientacja, dostępność podłączonej klawiatury), jak i opcje konfiguracyjne, określane przez użytkownika (np. wybrane ustawienia lokalne).

Znajomość konfiguracji urządzenia przez Androida jest konieczna w chwili uruchamiania aktywności, ponieważ może mieć ona realny wpływ na zasoby niezbędne dla działania aplikacji. Przykładowo – inny układ może być wykorzystywany, gdy urządzenie znajduje się w orientacji pionowej, a inny – w orientacji poziomej. W momencie zmiany konfiguracji urządzenia, konieczna jest aktualizacja wszystkiego, co prezentuje interfejs użytkownika – w taki sposób, by odpowiadał on nowej konfiguracji.

Jak temu zaradzić?

Przejdźmy teraz do sedna sprawy. W jaki sposób możemy poradzić sobie ze zmianami konfiguracji? Jak wspomniałem we wstępie, istnieją dwa rozwiązania naszego problemu.

Rozwiązanie nr 1 – pomijamy ponowne utworzenie aktywności

Nakazujemy systemowi, aby nie uruchamiał ponownie aktywności po wykryciu zmiany konfiguracji urządzenia. Należy jednak pamiętać, iż często nie jest to najlepszym rozwiązaniem – wynika to z faktu, iż gdy Android odtwarza aktywność, jednocześnie upewnia się, czy będzie ona wykorzystywać zasoby odpowiadające bieżącej konfiguracji. Pominięcie tego systemowego mechanizmu może więc prowadzić do napisania przez nas dodatkowego kodu, niezbędnego do obsługi nowej konfiguracji.

Aby zablokować przez Androida odtwarzanie aktywności po zmianie konfiguracji urządzenia, należy dodać do elementu activity w pliku manifestu AndroidManifest.xml następujący atrybut:

android:configChanges=”zmiana_konfiguracji”

gdzie zmiana_konfiguracji jest typem zmiany konfiguracji urządzenia.

Nas będzie interesowało pominięcie zmiany wielkości i orientacji ekranu, dlatego też musimy dodać do pliku AndroidManifest.xml poniższy fragment kodu:

<activity      
    android:name=”com.hfad.stoper.StopwatchActivity”

    android.label=”@string/app_name”

    android:configChanges=”orientation|screenSize” >

 

gdzie pionowa kreska “|” oznacza, iż należy pomijać obie podane zmiany konfiguracji.

Jeżeli Android rozpozna zmianę konfiguracji, której typ został przez nas podany w atrybucie, to zamiast standardowego odtwarzania aktywności, wywołana zostanie metoda onConfigurationChanged(Configuration):

public void onConfigurationChanged(Configuration config) {

}

 

Powyższa metoda może być stosowana do obsługiwania zmian w konfiguracji, o ile pojawi się taka konieczność.

Rozwiązanie nr 2 – zapisujemy bieżący stan i odtwarzamy go ponownie w onCreate()

Rozwiązanie to jest lepszym sposobem obsługi zmian konfiguracji. Polega na konieczności zaimplementowania metody onSaveInstanceState(). Jest ona wykonywana przed usunięciem aktywności i zapisuje jej bieżący stan. Metoda ta posiada jeden parametr – obiekt klasy Bundle, który pozwala na gromadzenie danych różnych typów w jednym obiekcie.

public void onSaveInstanceState(Bundle savedInstanceState) {

}

 

Obiekt klasy Bundle jest również przekazywany do metody onCreate(), a metoda ta ma następująca postać:

bundle.put*(“nazwa”, wartość)

Dane z obiektu Bundle możemy pobrać za pomocą metody:

bundle.get*(“nazwa”);

Dzięki poznanym rozwiązaniom jesteśmy w stanie zabezpieczyć się przed niechcianą utratą danych w momencie zmiany konfiguracji urządzenia np. obrotu urządzenia z pozycji pionowej na poziomą.

Na dzisiaj to już wszystko. Życzę wszystkim miłego weekendu. Smile

Androidowo – cykl życia aplikacji

Cześć, dzisiaj post o czymś co ma duże znaczenie w kwestii zrozumienia działania aplikacji androidowych, czyli o cyklu życia actvity. Myślę, że najlepiej pokazuje to diagram ukazany poniżej dostępny w dokumentacji – (KLIK).

image

Cykl życia aktywności (od utworzenia do usunięcia):

  1. Aktywność zostaje uruchomiona (system tworzy obiekt aktywności i zostaje wywołany jej konstruktor).
  2. Bezpośrednio po uruchomieniu aktywności zostaje wywołana metoda onCreate() (metoda onCreate() to miejsce, w którym umieszczany jest kod inicjujący działanie aktywności, gdyż jest ona zawsze wywoływana po uruchomieniu aktywności, lecz zanim zacznie ona działać).
  3. Aktywność działa, kiedy jest widoczna na ekranie i użytkownik może prowadzić z nią interakcję (aktywność znajduje się w tym stanie przez większość swego życia).
  4. Metoda onDestroy() jest wywoływana bezpośrednio przed usunięciem aktywności (pozwala ona na wykonanie ostatecznych porządków po aktywności, poprzez zwolnienie używanych przez nią zasobów).
  5. Po wykonaniu metody onDestroy() aktywność przestaje istnieć.

Każda aktywność może znajdować się czterech stanach:

  1. Znajduje się pierwszym planie.
  2. Jest wyświetlana, lecz nie znajduje się na pierwszym planie.
  3. Jest wyłączona. Nie ma jej w pamięci operacyjnej.
  4. Jest wstrzymana. Nie jest zamknięta, lecz nie jest też widoczna. Działa w tle. Aktywność pozostająca w tym stanie w razie potrzeby większej ilości pamięci może zostać w każdej chwili zniszczona przez system.

A co z metodami onStop(), onPause() i onResume()?

  • Metoda onStop() – jest wywoływana, gdy aplikacja jest zamykana.
  • Metoda onPause() – jest wywoływana przed metodą onStop() w przypadku zamykania aplikacji. Innym przypadkiem jej wywołania jest moment, w którym obracamy ekran smartfona.
  • Metoda onResume() – jest wywoływana również w momencie, gdy obracamy ekran smartfona, lub przy powrocie do działania po wcześniejszym wywołaniu metody onPause().

Myślę, że wymieniłem najważniejsze rzeczy dotyczące cyklu  życia aplikacji. Dla bardziej wnikliwych polecam zajrzeć na stronę z dokumentacją – (KLIK). Do zobaczenia w przyszyłym tygodniu! Smile