Egzamin Systemy mobilne v1 PDF

Title Egzamin Systemy mobilne v1
Course Systemy mobilne
Institution Politechnika Bialostocka
Pages 12
File Size 744.2 KB
File Type PDF
Total Downloads 101
Total Views 134

Summary

Na egzamin...


Description

1 1.1

ANDROID [konkretne odp na pytania, może być jedno zdanie, nie lać wody]: Narysuj schemat cyklu życia aktywności w Androidzie i opisz wybrane 3 stany. [Na pewno będzie, pewniak, obowiązkowy] tdw sekta

onCreate() - metoda wywoływana gdy Activity zostało stworzone; metoda powinna zostać użyta do inicjalizacji Aktywności. To tutaj powinien zostać zbudowany interfejs użytkownika, powiązane dane z kontrolerami, ewentualnie stworzone Serwisy i/lub wątki onDestroy() - metoda jest wywoływana, gdy Activity jest niszczone onStart() - metoda wywoływana, gdy Activity staje się widoczne dla użytkownika, ale interakcja użytkownika z Activity nie jest możliwa

// Grześ chyba mówił że stany to onCreate itp ale jeśli jednak te z -ed na końcu to poniżej jest druga wersja odp //onCreate itd to metody wywoływane podczas przejść między stanami

Stany: Created Started Resumed - stan zwany też running, activity jest na wierzchu i na nim skupiona jest uwaga użytkownika Paused - activity jest nadal widoczne na ekranie ale przesłania je inne activity (może być usunięta przez system w przypadku ekstremalnego braku pamięci) Stopped - activity całkowicie przesłonięta przez inna aktywność, jednak jest nadal w pamięci i przechowywany jest jego stan (w każdej chwili może zostać zniszczona przez system) Destroyed 1.2

Co się dzieje z aktywnością gdy telefon zostanie obrócony? W jaki sposób zapobiec utracie danych w trakcie przedmiotowego procesu? [Może będzie bo fajne] Zostanie zniszczona (wykonają się jej metody cyklu życia aż do onDestroy()) i za chwile stworzona ponownie (onCreate()). Metody zapobiegania utracie danych podczas obracania: ● Dodanie flagi android:configChanges="orientation|screenSize" w pliku Manifest (wyłącza to ponowne tworzenie activity przy zmianie orientacji ekranu a tym samym rozmiaru) ● Zapisanie stanu danych - onSaveInstanceState() i późniejsze odtworzenie w onRestoreInstanceState() 1.3

Z jakiego powodu powstały fragmenty? [Nie podoba się] [Chodziło i wyświetlacz w tabletach.] W jaki sposób można je wykorzystać w tworzeniu interfejs użytkownika? [Teraz ok] Fragmenty powstały wraz z dużymi interfejsami w tabletach w celu podzielenia aplikacji na mniejsze części którymi łatwiej zarządzać, przez co zmniejsza się liczba aktywności. Fragmenty można ustawiać obok siebie, np. fragment listy wiadomości i szczegółów wiadomości. 1.4

Gdzie aplikacja może przechowywać swoje dane? Podaj przykład użycia wybranej metody lub krótki opis słowny. [Pamięć zewnętrzna, wewnętrzna, zewnętrzny serwer - chmury, bazą danych, shared preferences]

Shared Preferences, pamięć telefonu, pamięć zewnętrzna (karta SD), bazy danych SQLite i miejsca sieciowe (np. chmura) SharedPreferences - pozwalają zapisywać proste wartości (int, string, bool) do plików xml które są zarządzane przez użytkownika i zapisywane do pamięci urządzenia. Działają na zasadzie klucza i wartości. https://developer.android.com/guide/topics/data/data-storage

1.5

Co to jest layout? Opisz wybrane 2 layouty. [idealne]

Layout to element interfejsu użytkownika definiujący strukturę - sposób rozmieszczenia kontrolek tego interfejsu.

● RelativeLayout - elementy w nim można ustawiać względem siebie, wyśrodkowywać itp. ● LinearLayout - tzw. stack-view, elementy w nim ustawiają się jeden nad drugim lub jeden obok drugie go w zależności od ustawionej orientacji layoutu. Layout umożliwia też równe rozłożenie miejsca dla kontrolek przez parametr weight. 1.6

Do czego służy Adapter i ViewHolder? ● Adapter jest obiektem klasy, która implementuje interfejs Adapter. Działa jako połączenie między zestawem danych i widokiem adaptera, obiektem klasy, która rozszerza abstrakcyjną klasę AdapterView. Adapter jest odpowiedzialny za pobieranie danych z zestawu i generowanie obiektów View opartych o te dane. Wygenerowane obiekty View są następnie wykorzystywane do umieszczania widoku adaptera przywiązanego do adaptera. ● ViewHolder jest obiektem klasy, która potrafi przechowywać widżety/kontrolki obecne w układzie. ViewHolder przyspiesza działanie aplikacji.

https://www.youtube.com/watch?v=N6YdwzAvwOA - do 12 min wytłumaczone czym jest adapter i czemu ten ViewHolder tak przyspiesza działanie aplikacji. 1.7 W jaki sposób następuje związanie pomiędzy XML a kodem aplikacji? [podoba się, obiekt R] Za pomocą obiektu klasy R oraz pomocniczych metod np. findViewById() lub inflaterów 1.8

Wymień min 4 rodzaje zasobów. Omów kwalifikatory w Androidzie i podaj przykład. [pewniak, na pewno będzie]. Rodzaje zasobów: String Array, Layout, Style, Dimension, Color, String, Drawable, Mipmap Każdy typ zasobu może mieć opcjonalne zasoby alternatywne, których Android, może używać pod kątem określonych urządzeń, różniących się np. językiem, rozmiarem ekranu. Zasoby alternatywne są określone przez dodanie krótkiego ciągu o nazwie kwalifikator, na końcu katalog zawierający dany typ zasobów. Przykład kwalifikatora: -pl dołączony na końcu nazwy folderu z wartościami dla języka polskiego. Inny przykład: -mdpi, -hdpi, -xhdpi dla Drawables i Mipmap przechowujące ten sam obrazek w różnej jakości, którą system sobie wybiera na podstawie rozdzielczości ekranu 1.9

Co oznacza, gdy metoda getDefaultSensor zwraca null? [Zależy od argumentu tej metody. może argument był niedozwolony] [będzie] Nie istnieje czujnik danego typu lub aplikacja nie ma do niego uprawnień

1.10 Jaki typ danych reprezentują wartości otrzymywane z sensorów urządzenia dlaczego wykorzystuje się ten typ danych. [ok, ale nie na pierwszy termin, ale może jednak będzie] Jest to tablica floatów, którą otrzymujemy z obiektu SensorEvent. Ten typ danych jest wykorzystywany ze względu na to, że czujniki mogą mierzyć więcej niż jeden parametr całkowitoliczbowy lub zmiennoprzecinkowy. Zatem ten typ danych zapewnia uniwersalność. 1.11 Programista przed wystawieniem aktualizacji aplikacji do Sklepu Play odinstalowuje tworzoną aplikację z telefonu i instaluje ją poprzez Sklep Play, a następnie ręcznie instaluje nową wersję aplikacji. Przed jakimi błędami chroni takie zachowanie? [o właśnie, dobre pytanie, podoba się] W ten sposób można sprawdzić, czy np. nie zmieniły się jakiś klucze SharedPreferences, czy nie trzeba zrobić migracji bazy danych, czy nie zmieniła się konfiguracja jakiejś ważnej części aplikacji, co mogłoby spowodować zatrzymanie aplikacji po aktualizacji 1.12 Czym jest MonkeyRunner? [zostawiamy] [do testowania] Jest to narzędzie wykorzystywane do testów aplikacji. Wysyła losowe naciśnięcia przycisków, dotknięcia lub zdefiniowane w skrypcie użytkownika. Jakbyście telefon małpie dali i odebrali za pół godziny, możecie zobaczyć wtedy czy wasza apka ma na pewno wszystkie zachowania obsłużone.

1.13 Wymień i opisz 3 kategorie czujników. [zostawiamy] [środowiskowe,... ] ● Sensory ruchu są odpowiedzialne za pomiary sił przyspieszenia i sił obrotowych zachodzących wzdłuż 3 osi: X, Y i Z. Są to osie bezwzględne, niezależne od urządzenia. Do tej kategorii sensorów możemy zaliczyć np. akcelerometr czy żyroskop. ● Sensory pozycji są odpowiedzialne za pomiary związane z fizycznym położeniem urządzenia. Osie są zdefiniowane względnie do ekranu w jego domyślnej pozycji. Do tej kategorii należą sensory położenia (np. GPS) i magnetometr ● Sensory środowiskowe są odpowiedzialne za pomiary różnych parametrów związanych z otaczającym urządzenie środowiskiem, np. stopnia oświetlenia, wilgotność, ciśnienie czy temperaturę powietrza 1.14 Które usługi można uruchamiać za pomocą getSystemService() i dlaczego należy używać getSystemService()? [to dobre pytanie] Za pomocą tej metody można uruchamiać usługi zasobów sprzętowych np. czujników, usługi lokalizacyjne, drukowanie, usługi alarmów, kamer itd. Należy używać getSystemService bo system sam tworzy instancje a my tylko uzyskujemy referencję. 1.15 Co to jest Intent i jakie ma zadania? [dobre pytanie i chyba mi się podoba] Intent to obiekt, który zapewnia powiązanie środowiska wykonawczego między oddzielnymi komponentami, np. dwoma Activities. Intencja to "zamiar zrobienia czegoś". Intent jest odpowiedzialny przede wszystkim za obsługę rozkazów wydawanych przez użytkownika. Za pomocą intencji możemy wprowadzić komunikację pomiędzy aplikacjami (lub mniejszymi komponentami, jak Usługi, Aktywności itp.). Jednak najważniejszym zadaniem tego komponentu jest uruchamianie odpowiednich aplikacji/Aktywności. 1.16 Jak połączyć się z internetem?

ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

2

iOS [trzeba znaleźć egz z poprzednich lat bo Skoczylas mówił że podobne będzie]:

2.1 Wypisz trzy modyfikatory dostępu używane w Objective C i je krótko opisz. @private - atrybut widoczny jedynie dla metod klasy, która go zadeklarowała @protected - atrybut widoczny dla metod klasy, która go zadeklarowała, oraz dla jej klas potomnych @public - atrybut widoczny „na zewnątrz” klasy @package - zasięg pakietowy, widoczny w jednostce w której opisana jest implementacja klasy 2.2 Jakie jest przeznaczenie kwalifikatora IBOutlet? IB stanowi skrót od Interface Builder. Wskazuje to na przeznaczenie tego kwalifikatora – służy on do oznaczania zmiennych, do których można odnosić się w narzędziu Interface Builder. Istnieje również analogiczny kwalifikator do oznaczania metod – IBAction. (wg mnie tak troche bez konkretow to co powyżej więc wrzucam co uważam za uzyteczniejsze, niech ktos oceni, jak chujowe; niech wyrzuci) IBOutlet and IBAction don't really do anything special programmatically. They are mainly indicators to Interface Builder of things that are available for it to "hook up" to. IBOutlet is a keyword you add to a variable declaration. It does not affect the declaration in any way. However, when Interface Builder sees it, it will let you set this variable through the "outlet" mechanism inside Interface Builder. 2.3 Jak nazywa się mechanizm zarządzający czasem życia obiektów? @autoreleasepool 2.4

Czym jest ARC w języku Objective-C?

Automatic Reference Counting (ARC) is a memory management feature of the Clang compiler providing automatic reference counting for the Objective-C and Swift programming languages. At compile time, it inserts into the object code messages retain and release which increase and decrease the reference count at run time, marking for deallocation those objects when the number of references to them reaches zero. ARC differs from tracing garbage collection in that there is no background process that deallocates the objects asynchronously at runtime. Unlike garbage collection, ARC does not handle reference cycles automatically. This means that as long as there are "strong" references to an object, it will not be deallocated. Strong cross-references can accordingly create deadlocks and memory leaks. It is up to the developer to break cycles by using weak references. ARC (Automatic Reference Counting) - mechanizm zarządzający pamięcią wbudowany w Objective-C, oraz Swift, który liczy liczbę referencji do obiektu. W czasie kompilacji kodu umieszcza "wiadomość" w obiekcie, czy ma zachować lub opuścić referencję. W czasie trwania programu, zwiększa lub zmniejsza ilość referencji do obiektu, jeżeli liczba referencji wynosi 0, zaznacza obiekt do dealokacji. 2.5

Opisz krótko klasę NSDictionary.

Klasa NSDictionary deklaruje programowy interfejs do obiektów zarządzających niezmiennymi powiązaniami kluczy i wartości. Używa się jej, lub jej podklasy NSMutableDictionary, gdy potrzebujesz wygodnego i wydajnego sposobu na pobranie danych powiązanych z dowolnym kluczem. NSDictionary tworzy słowniki statyczne, a NSMutableDictionary tworzy dynamiczne słowniki. 2.6

Opisz krótko klasę NSArray. Jaka jest różnica pomiędzy NSArray a NSMutableArray?

NSArray i jej podklasa NSMutableArray zarządzają uporządkowanymi kolekcjami obiektów zwanymi tablicami. NSArray tworzy statyczne tablice, a NSMutableArray tworzy dynamiczne tablice. 2.7

Opisz krótko klasę NSString.

Klasa NSString udostępnia szeroki zestaw interfejsów API do pracy z łańcuchami, w tym metody porównywania, wyszukiwania i modyfikowania łańcuchów. 2.8

Stwórz i zainicjalizuj obiekt dowolnej klasy np. Klasa.

Klasa * k = [[Klasa alloc] init];

2.9 Jak wygląda składnia metody w Objective-C? (-/+) (void) setMonthName:(NSString *)newMonthName AndYear: (int) newYear{}; gdzie minus to metoda obiektu/(plus to metoda klasy statyczna), w pierwszym nawiasie typ zwracany a następnie nazwa metody przeplatana z typami i nazwami argumentów jakie przyjmuje. 2.10 Która klasa w języku Objective-C jest klasą bazową dla wszystkich klas? NSObject 2.11 Do czego służy plik Info.plist? Ten plik służy do przechowywania “metadanych” z właściwościami konfiguracyjnymi aplikacji. Dane są typu słownikowego, tzn. “klucz” oraz “wartość”. 2.12 Co zarządza przejściami między widokami? Przejściami między widokami zarządza Segue. Po wywołaniu segue, uruchamiana jest metoda prepareForSegue:sender:. Zaimplementowanie tej metody pozwala na przesyłanie danych do innego kontrolera. Dobrą praktyką jest przypisanie każdemu segue unikalnego identyfikatora. Nadaj więc utworzonemu połączeniu nazwę, np. sendSurnameSegue. 2.13 Narysuj cykl życia ViewController’a.

2.14 Narysuj schemat cyklu życia aplikacji i opisz wybrane 2 stany.

Not running - aplikacja nie została uruchomiona lub była uruchomiona ale została zatrzymana przez system Inactive - aplikacja pracuje na wierzchu ale obecnie nie otrzymuje żadnych eventów Active - aplikacja działa na wierzchu i otrzymuje eventy - jest to normalny tryb dla aplikacji na wierzchu Background - aplikacja pracuje w tle Suspended - aplikacja jest w tle ale nie wykonuje swojego kodu

2.15 Jaka jest różnica pomiędzy Automatic Reference Counting (ARC) a Garbage Collectorem? Oba używają metody: Zliczanie referencji (ang. reference counting). GC jest mniej wydajne niż ARC. Ale zapewnia niezawodne zwalnianie pamięci. ARC brak zabezpieczania: wzajemne (cykliczne) odwołania. ARC nie śledzi działania programu, w czasie kompilacji „dopisuje”, „uzupełnia” kod o komendy zwalniania pamięci. ARC działa w czasie kompilacji a GC w czasie działania programu. ARC - nie ma włączonego procesu w tle który dealokuje obiekty w czasie wykonywania kodu w przeciwieństwie do GarbageCollectora, który taki proces posiada, co sprawia, że ARC jest efektywniejsze na urządzeniach mobilnych GarbageCollector zaś wspiera referencje cyklicznie automatycznie, w ARC referencja "strong" do obiektu nie zostanie zdealokowana, bo jest oznaczona jako "silna". Silne referencje powodują możliwość deadlocków i wycieków pamięci, developer może zapobiec takiemu działaniu poprzez przerwanie cyklu używając słabych referencji.

2.16 Czym jest NSAutoreleasePool? NSAutoreleasePool -vs- @autoreleasepool Klasa NSAutoreleasePool służy do obsługi systemu zarządzania pamięcią za pomocą zliczania referencji Cocoa. https://www.mindstick.com/blog/10917/objective-c-nsautoreleasepool-class https://journeytoiosdeveloper.wordpress.com/2015/05/21/nsautoreleasepool-vs-autoreleasepool/ “In ARC we can't use NSAutoreleasePool and @autoreleasepool block can be used in both ARC enabled and disabled case.” - krótko xdd If you use Automatic Reference Counting (ARC), you cannot use autorelease pools directly. Instead, you use @autoreleasepool blocks. For example, in place of: NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // Code benefitting from a local autorelease pool. [pool drain]; You would write: @autoreleasepool { // Code benefitting from a local autorelease pool. } @autoreleasepool could be treated as a syntax sugar. In terms of compilation speed or backend optimization, it doesn’t improve the efficiency. On the contrary, developers could suffer more time-consuming compilation process. But, I think in the perspective of code quality, it’s an improvement. Because it drains the NSAutoreleasePool safer. Even though @autoreleasepool statement is equivalent to NSAutoreleasePool, but when thinking about using NSAutoreleasePool in a manually API, it is very easy to accidentally forget to drain an autorelease pool, then all objects in this pool will not be released. 2.17 Czym są bloki i do czego sie ich używa? Są to zestawy instrukcji, które mogą być przechowywane jak zmienne i używane jakby były wartościami. Mogą przyjmować i zwracać wartości. Blocks are a language-level feature added to C, Objective-C and C++, which allow you to create distinct segments of code that can be passed around to methods or functions as if they were values. Blocks are Objective-C objects, which means they can be added to collections like NSArray or NSDictionary. They also have the ability to capture values from the enclosing scope, making them similar to closures or lambdas in other programming languages. https://www.cocoawithlove.com/2009/10/ugly-side-of-blocks-explicit.html

Block Syntax The syntax to define a block literal uses the caret symbol (^), like this: void (^simpleBlock)(void);

simpleBlock = ^{ NSLog(@"This is a block"); }

https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/ WorkingwithBlocks/WorkingwithBlocks.html

2.18 Czym jest memory footprint i jakiego narzędzia używamy do zbadania? Memory footprint to ilości pamięci głównej (RAM) używanej przez program lub do której program się odwołuje. Narzędzie: Allocations 2.19 Co to jest kategoria? Kategoria to klasa rozszerzająca pewną klasę w celu zmniejszenia linijek kodu w niej, bez zmieniania zawartości danej klasy. Klasa ta dodaje nowe metody, nie rusza ani nie nadpisuje tych w klasie, którą można by nazwać “bazową”. #import "Car.h" @interface Car (Maintenance) (nawias wskazuje na kategorię)

To chyba takie coś jak partial class w C#. 2.20 Jak się tworzy, dodaje, modyfikuje i usuwa obiekty w obrębie klasy NSArray? do nsarray da się tylko przy tworzeniu dodac i nic więcej i robi sie to tak: NSArray * arr = [NSArray arrayWithObjects: obj1, obj2 , nil]; jak mowa o mutable: NSMutableArray * arr = [NSMutableArray arrayWithObjects: obj1, obj2 , nil]; [arr addObject: nazwaObiektu]; usuwanie jakie se chcecie dam wam kilka [arr removeObject: nazwaObiektu] macie tez opcje: removeLastObject, removeObjectAtIndex edycja: [arr replaceObjectAtIndex:numer withObject:jakiSeChcesz];

2.21 Czym różnią się obiekty zwykłe od mutable? Obiekty mutable mogą być zmieniane/modyfikowane. Natomiast obiekty immutable nie mogą być zmieniane. CHYBA - jest dobrze NS nie mogą być edytowane, tylko ponownie przypisane. Oznacza to, że gdy zmieni się wartość NSString, to faktycznie wskazuje na nową lokalizację w pamięci. Obiekty NSMutable można edytować i utrzymywać ten sam wskaźnik.

2.22 W jaki sposób ograniczana jest lista osób które moga testować nasza aplikację przed dodaniem do AppStore przed oficjalnym wydaniem? Lista osób jest ograniczana za pomocą aplikacji TestFlight, za pomocą której zapraszamy i dodajemy do 25 testerów https://developer.apple.com/testflight/

==================================================================================

Rzeczy z paczek: // ogólnie wszystko nie wiem kogo, skąd i czy dobrze dobry plik z Androidem i iOS: https://drive.google.com/open?id=1f41MYfNvX2aKHR_kBSql2IWqAiA32YBO

Android: https://drive.google.com/open?id=1vOctLZJKSrsjHOcns3eHN4dnKWZC7dGY https://drive.google.com/open?id=14ljHy5CV2eBhxU4jRYsu-xeg6FEoGExh

iOS: https://drive.google.com/open?id=1QEfwFogU-5w1OQVi1JjseGugoL1owy1i https://drive.google.com/open?id=10LopoNWjdbg7_aavBeQrXtor03nxEyfm

Do spania! 2:30 do spania I tak da co innego dr traphouse kolega od jebanka...


Similar Free PDFs