android operációs rendszert futató mobilkészülékre...
TRANSCRIPT
-
Pázmány Péter Katolikus Egyetem Információs Technológiai Kar
Android operációs rendszert futató mobilkészülékre
szótáralkalmazás készítése Konzulens neve: Dr. Takács György Készítette: Antal Péter Műszaki Informatika szak
2010. január
-
2
PÁZMÁNY PÉTER KATOLIKUS EGYETEM
INFORMÁCIÓS TECHNOLÓGIAI KAR
DIPLOMATERV-TÉMA BEJELENTÉS
Név: Antal Péter Tagozat: nappali Szak: Műszaki Informatika Témavezető neve: Dr. Takács György
A dolgozat címe: Android operációs rendszert futató mobilkészülékre szótáralkalmazás készítése
Elemezzen már kész szótár alkalmazásokat, majd vizsgálja meg azok lehetséges megvalósítási lehetőségeit egy Android alapú mobilkészüléken.
Dolgozzon ki egy megfelelő szótáralkalmazást a készülékre. Vegye figyelembe a következő szempontokat a tervezés során: kényelem, erőforrásigény, használhatóság.
Tekintse át a programozáshoz használt nyelvi környezet elemeit, annak szükséges osztályait, metódusait. Ismerje fel a megvalósításhoz szükséges osztályokat.
Készítsen vázlatot a projekt könyvtárainak, fájljainak a program működése során betöltött szerepéről.
Modellezze a megvalósítás menetét, a program különböző részeinek működését. Dolgozza ki a szükséges programrészeket, metódusokat.
Vizsgálja meg a program szótárszerkezetének bővíthetőségét, az egyes már kész szótárak bővítési lehetőségeit, valamint új modulokkal való kiegészítés lehetőségét.
Tesztelje az egyes programrészek működését, majd az egész programot különböző szempontok szerint.
Szemléltesse az elkészült program működését emulátoros környezetben.
Mutassa be legfontosabb funkciókat, milyen beállítási lehetőségekkel rendelkezik a kezelőfelület.
Határozza meg a program főbb előnyeit. Osztályozza kényelem, használhatóság szempontból.
Ellenőrizze a program, hosszabb távú működését az erőforrások használata szempontjából.
Mutassa be alkalmazásának lehetséges területeit.
-
3
A témavezetést vállalom:
....................................................
(a témavezető aláírása)
Kérem a diplomamunka témájának jóváhagyását.
Budapest, 200. …………….
....................................................
(a hallgató aláírása) A diplomamunka-témát az Információs Technológiai Kar jóváhagyta. Budapest, 200. ……………
...................................................... Nyékyné dr. Gaizler Judit Dékán A diplomatervet átvettem:
Budapest, 200…………………….
.................................................... (a témavezető aláírása)
-
4
Nyilatkozat
Alulírott Antal Péter, a Pázmány Péter Katolikus Egyetem Információs Technológiai
Karának hallgatója kijelentem, hogy ezt a diplomatervet meg nem engedett segítség nélkül,
saját magam készítettem, és a diplomamunkában csak a megadott forrásokat használtam fel.
Minden olyan részt, melyet szó szerint, vagy azonos értelemben, de átfogalmazva más
forrásból átvettem, egyértelműen a forrás megadásával megjelöltem. Ezt a Diplomamunkát
más szakon még nem nyújtottam be.
…………………..………………..
(a hallgató aláírása)
-
5
Tartalomjegyzék
Kivonat ........................................................................................................................... 8
Abstract......................................................................................................................... 11
Bevezetés ...................................................................................................................... 14
1 Vizsgálat .................................................................................................................... 15
1.1 Már meglévő szótár alkalmazások vizsgálata .................................................... 15
2 Platform megismerése ............................................................................................... 23
2.1 Mi az Android? .................................................................................................. 23
2.1.1 Android jellemzői ...................................................................................... 23
2.1.2 Android architektúrája ............................................................................... 24
2.1.3 Applications (Alkalmazások) ..................................................................... 24
2.1.4 Applications Framework (Alkalmazás Keretrendszer) .............................. 24
2.1.5 Libraries (Könyvtárak) ............................................................................... 25
2.1.6 Android Runtime (Android Futtatókörnyezet) .......................................... 26
2.1.7 Linux Kernel (Linux Rendszermag) .......................................................... 26
3 Az Android alkalmazás alapelemei ........................................................................... 27
3.1 Alkalmazás komponensek ................................................................................. 27
3.1.1 Activities (Aktivitások) .............................................................................. 28
3.1.2 Services (Szolgáltatások) ........................................................................... 29
3.1.3 Broadcast Receivers (Szórt üzenet Fogadók) ............................................ 30
3.1.4 Content Providers (Tartalomszolgáltatók) ................................................. 30
3.1.5 Aktiváló komponensek: Intent-ek .............................................................. 31
3.1.6 Komponensek leállítása ............................................................................. 32
3.1.7 A Manifest fájl (Az Önleíró fájl) ............................................................... 33
3.1.8 Intent Filter-ek............................................................................................ 34
3.2 Activity-k és task-ok .......................................................................................... 35
3.2.1 Affinity-k és új task-ok .............................................................................. 37
3.2.2 Indítási módok............................................................................................ 38
3.2.3 A verem kiürítése ....................................................................................... 40
3.2.4 Task-ok indítása ......................................................................................... 41
3.3 Process-ek és Szálak .......................................................................................... 42
3.3.1 Process-ek .................................................................................................. 42
-
6
3.3.2 Szálak ......................................................................................................... 43
3.3.3 Távoli eljáráshívások ................................................................................. 43
3.3.4 Szálbiztos metódusok ................................................................................. 45
3.4 Komponens életciklusok .................................................................................... 46
3.4.1 Activity életciklus ...................................................................................... 46
3.4.1.1 Activity állapotának mentése ............................................................. 53
3.4.1.2 Összehangoló Activity-k .................................................................... 54
3.4.2 Service életciklus ....................................................................................... 54
3.4.3 Broadcast Receiver életciklusa .................................................................. 57
3.4.4 Process-ek és életciklusok .......................................................................... 57
4 A szoftverfejlesztés előkészületei.............................................................................. 60
4.1 Használt fejlesztői környezet ............................................................................. 60
4.2 Az Android 1.6 SDK telepítése ......................................................................... 60
4.3 Az ADT plugin telepítése Eclipse-re ................................................................. 61
4.3.1 ADT plugin telepítésének menete Eclipse 3.5 (Galileo) esetén ................. 61
4.4 Az Eclipse ADT plugin frissítése ...................................................................... 62
4.4.1 A korábbi ADT plugin eltávolítása ............................................................ 63
4.4.2 Az Eclipse SDK beállításainak frissítése ................................................... 63
4.5 Eclipse projektek frissítése ................................................................................ 64
4.6 AVD készítése és elindítása ............................................................................... 64
4.7 Az alkalmazások előre irányú kompatibilitásának tesztelése ............................ 65
4.7.1 Javaslatok az Android alkalmazások előre irányú kompatibilitására ........ 66
4.8 Az alkalmazás migrálása ................................................................................... 67
4.9 Az SDK könyvtár tartalma ................................................................................ 67
5 Programozási alapok ................................................................................................. 69
5.1 Eclipse projekt létrehozása és a projekt elemei ................................................. 69
5.2 XML Layout fájl ................................................................................................ 71
5.3 R.java fájl ........................................................................................................... 72
5.4 AndroidManifest.xml fájl .................................................................................. 72
5.5 Android emulátor ............................................................................................... 76
5.6 Futtatás és hibakeresés ....................................................................................... 77
6 Az alkalmazás fejlesztése .......................................................................................... 80
6.1 A szótár szavainak beszerzése ........................................................................... 80
6.2 A Szótár Indexelő alkalmazás ........................................................................... 81
-
7
6.2.1 Az alkalmazás működésének bemutatása .................................................. 81
6.2.2 Az alkalmazásban használt osztályok áttekintése ...................................... 85
6.2.3 Az alkalmazás működése ........................................................................... 91
6.3 Az Android-ra készített szótár alkalmazás ........................................................ 93
6.3.1 Az alkalmazás működésének bemutatása .................................................. 93
6.3.2 A tervezés menete ...................................................................................... 99
6.3.3 Az alkalmazás könyvtárainak és fájljainak szerep a projektben .............. 101
6.3.4 Az alkalmazás Java fájljaiban használt osztályok.................................... 102
6.3.5 Az alkalmazás XML fájljaiban használt View objektumok .................... 108
6.3.6 Az alkalmazás működésének tesztelése ................................................... 111
6.3.7 Bővíthetőség és továbbfejlesztési lehetőségek ........................................ 113
6.3.8 Lehetséges alkalmazási területek ............................................................. 113
6.3.9 Szótár alkalmazás értékelése .................................................................... 114
Összefoglaló ............................................................................................................... 114
Köszönetnyilvánítás ................................................................................................... 115
Szójegyzet................................................................................................................... 116
Irodalom ..................................................................................................................... 120
-
8
Android operációs rendszert futató mobilkészülékre szótáralkalmazás készítése
Antal Péter
Kivonat: Napjainkban rengeteg mobilkészülék gyártó van jelen a piacon. Ezeken a
készülékeken más-más operációs rendszer fut. Itt meg lehet említeni a Symbiant, aki közel a
mobil piac felét uralja, a RIM Blackberry-t, az Apple iPhone-t, a Windows Mobile-t és az
Google Android-ot, ami Linux alapokon nyugszik, és 2009 második negyedévének adatai
alapján már 2,8% részesedése van a mobil piacból.
Mint látható elég vegyes a felhozatal a különböző operációs rendszerek kínálatából.
Sajnos ezek az operációs rendszerek nincsenek igazán jól kidolgozva, sokszor merülnek fel
kompatibilitási problémák az adott operációs rendszerek különböző verziói között. Így, ha van
egy helyesen működő mobil alkalmazásunk az egyik platformon, akkor könnyel elképzelhető,
hogy a következő platformverzión nem helyesen, vagy sehogy sem fog működni.
A mobil platformok felaprózódásának további elkerülése végett és a kompatibilitási
problémák megoldására a Google 2008 októberében bemutatta az új Android operációs
rendszerét. Ezen új platform mögött ott áll még az Open Handset Allience is, ami magába
foglal több hardver és szoftver gyártót, mint például az Intel, a HTC, a T-Mobile, az LG, a
Samsung, a Motorola és az Ericsson, csak az ismertebbeket említve a jelenlegi tagok közül.
Az Android ellentétben a mobil operációs rendszerek többségével, nem zárt
forráskódú, hanem Open Source. Bárki módosíthatja az operációs rendszer kódját és átírhatja,
kiegészítheti az alkalmazásokat új funkciókkal. Így a készülék gyártók a saját igényeikhez
tudják igazítani ezt a rendszert.
A platformon a szoftverfejlesztés Java nyelven folyik. Az alap Java API-k ki vannak
egészítve a Google által fejlesztett API-kal. A platformra történő fejlesztéshez az Android
SDK-t lehet használni. A fejlesztés jobb átláthatósága és megkönnyítése érdekében a Google
készített egy ADT plugin-t az Eclipse IDE-hez.
A platform rengeteg látványos API-val rendelkezik, amik nagyon élvezhetővé teszik
az operációs rendszerre írt alkalmazásokat. Új alkalmazásokat a mobil készülékre, az iPhone-
os példát követve, egy a mobil készüléken található Android Market nevű alkalmazás
segítségével lehet interneten keresztül telepíteni.
Ezen operációs rendszeren a kompatibilitási problémák lényegében megoldódtak,
mivel az előre irányú kompatibilitás jól támogatott a különböző platformváltozatok között. Az
operációs rendszer régebbi változatainak programjai jól működnek az újabb verziókon is.
Viszont mivel eléggé kiforróban van ez az új platform, így olykor történnek változtatások a
fejlesztendő alkalmazás projekt struktúrájában , valamint helytelenítetté válnak különböző
-
9
metódusok. Természetesen mindig kínálnak az épp helytelenített metódusra alternatívát, így
gyorsan módosítható az alkalmazás, hogy a legújabb platformon is helyesen futtatható legyen.
A platform kínálta nagy szabadság és a Google által kiírt fejlesztői versenyeknek
köszönhetően napjainkban, mind a fejlesztők száma, mind az operációs rendszerre írt
alkalmazások száma rohamos mértékben növekszik.
Feladataim között szerepelt az operációs rendszer képességeinek vizsgálata, valamint
a készülékre már megírt szótárak vizsgálata. Ezek után felmértem, hogy milyen igény van egy
újabb szótár alkalmazás elkészítésére. A vizsgálat során kiderült, hogy nagyon sok
kényelmesen használható API-t kínál az Android, így a készítendő szótár alkalmazás a kor
követelményeinek és igényeinek megfelelően fog kinézni és jól használható lesz. Több
szótáralkalmazást megvizsgálva, arra az eredményre jutottam, hogy a nyelvek közötti
átfordítás nagyon jól támogatott. Számos alkalmazás beépítve használja a Google Translate
fordítási funkcióját.
Tehát egy újabb az idegen nyelvek közötti átfordítást segítő szótárra már nincs igény,
ezért azt kezdtem vizsgálni, hogy létezik-e valamilyen magyar értelmező szótár. Azt találtam,
hogy angol, német és francia változatok már szép számmal léteznek, de jelenleg magyar
verzió nem elérhető a platformra.
A fejlesztés megkezdéséhez a Android Developers oldal rendkívül nagy segítséget
nyújtott. Rengeteg forráskód és kész alkalmazáshoz lehet itt hozzáférni, hogy a platform
képességeivel jobban megismerkedjünk, így gyorsan és látványosan tudjunk alkalmazást
fejleszteni rá.
Új kiforróban lévő dolog lévén, a fejlesztői fórumokon pezseg az élet. A felmerülő
programozási problémákra általában itt lehet megoldást találni. Az SDK is rengeteg példa
alkalmazást tartalmaz, amikhez természetesen a forráskódok is mellékelve vannak. Az
nyomtatott irodalom is kezd felfigyelni erre és már jó pár programozási könyv meg is jelent
ezen témával kapcsolatban. Viszont ezek jelenleg még csak idegen nyelven hozzáférhetőek.
A fejlesztés megkezdése előtt megismerkedtem az SDK és az Android operációs
rendszer alapvető elemeivel. Ezek szükségesek voltak, ahhoz, hogy az Android-ban történő
programozás szemléletmódját elsajátítsam, és megismerjem a létfontosságú szoftverelemei
működését. Ezeket részletesen ismertetem a dolgozatban.
A szótár alkalmazás szópárjainak listáját egy másik ingyenesen használható szótárból
exportáltam ki. Majd írtam egy Java alkalmazást, ami indexfájlokat hoz létre az Android
szótár számára, hogy a keresés gyorsabb legyen majd az elkészülő szótárban. A szótár
tervezése során, mivel mobil platformról van szó, a minél gyorsabb működést és az
rendelkezésre álló erőforrásokkal történő hatékony gazdálkodást tartottam szem előtt. További
szempont volt még a szép tetszetős, minél könnyebben és kényelmesebben kezelhető
felhasználói felület elkészítése.
http://translate.google.hu/#hu|en|�http://developer.android.com/�
-
10
Az elméleti ismertető után részletesen tárgyalva vannak a megismert és használt
eszközök, elgondolások, amik alapján elkészítettem a szótár alkalmazásomat. Az
alkalmazásban jó pár tetszetős funkciót beleépítettem, így ezen mobil platformmal ismerkedni
vágyók kedvet kaphatnak a dokumentum áttanulmányozása után az ezen platformra történő
szoftverfejlesztés megkezdéséhez.
-
11
Making of a dictionary application onto a mobile device that runs on Android
operation system
Antal Péter
Abstract: In our days many mobile device manufacturers present on the market. Different
operating system runs on these devices. It is possible to mention the Symbiant, who is
dominate near the half of the mobile market, the RIM Blackberry, the Apple iPhone, the
Windows Mobile and the Google Android, what is based on Linux, and based on the data of
the second quarter of 2009, it already have share in 2,8% of the mobile market.
Than rather mixed one which can be seen the arrival from the supply of the different
operating systems. Unfortunately these operating systems are not worked out really well,
compatibility problems come up many times the different versions of the given operating
systems. In this manner, if we have a mobile application that working correctly on one
platform, then easly imaginable that not runs correctly on the next version of the same
platform, or not work at all.
To avoide the further flittering of mobile platforms and solving the compatibility
problems, the Google introduced its new operating system in October of 2008. The Open
Handset Alliance still stands behind this new platform, it is consist of some hardware and
software manufacturers, as for example the Intel, the HTC, the T-Mobile, the LG, the
Samsung, the Motorola and the Ericsson, mentioning only the more known present members
of it.
The Android opposed to the majority of the mobile operating systems, it has not
closed source code, but Open Source. Anybody may modify the code of the operating system
and may rewrite it, may complement the applications with new functions. In this manner the
device manifacturers can set this system to their own claims.
The software development is going on Java language on the platform. The basic Java
APIs are complemented with APIs that developed by Google. To developing to the the
platform the Android SDK can be used. The better transparency of the development and in the
interest of its facilitation, the Google made an ADT plugin for the Eclipse IDE.
The platform has vast number of spectacular APIs, what make the applications written
onto the operation system very enjoyable one. New applications onto the mobile phone,
observing the iPhone example, can be intalled through internet with the help of an application
that can be found on the mobile phone and it called Android Market.
The compatibility problems essentially were resolved on this operating system,
because of the forward direction compatibility well supported between the different platform
versions. The programs of the older versions of the operating system work well on the newer
-
12
versions. However, since there is enough seething this new platform, so sometimes changes
happens to the structure of the project application to be developed, as well as different
methods are deprecated. Of course, they always provide alternatives for the deprecated
methods, so the application can be modified quickly in order to run correctly on the latest
platform.
Owing to the platform offered great freedom and the announced development
competitions by Google, in our days both the developer’s number and the number of the
applications written onto the operating system is rapidly growing
The examination of the abilities of the operating system was included in my tasks, as
well as the examination of dictionaries that already written to the device. After that, I assessed
what kind of claim is for making a new dictionary application. It turned out in the course of
the examination that very much useful comfortably API offers the Android, so the prepared
dictionary application will look according to the requirements and claims of the age and will
be well useful. Examining more dictionary applications, I managed to get onto that result, that
the translation between the languages are very well supported. Numerous applications using
built in the Google Translate translate feature.
So a new foreign language dictionary to help the translation between foreign
languages already would not be a claim, therefore I started to examine that is there exist some
kind of Hungarian foreign words dictionary. I have found it, that English, German an French
variants exist a fair number, but for the moment doesn’t available Hungarian version onto the
platform.
To the starting of the development the Android Developers site provide exceptionally
big help. A lot of source code and application ready to be accessed, that let us get the hang of
the abilities of the platform, that let use develop application quickly an spectaculary onto it.
New thing in one taking shape being the life fizzes on the developer forums. Onto the
emerging programming problems it is possible to find the solution here generally. The SDK
also contains many application examples, of course the source codes also attached to them.
The printed literature starts noticing this and quite a few programming books have published
in connection with this topic. However, they are available only on foreign language at the
present moment.
Before the starting of the development I have got acquainted the SDK and the Android
operating system fundamental elements. These were necessary to let me acquire the outlook of
the programming in Android, and let me recognize the function of its vital software elements.
These are described in details in the paper.
The list of the words of the dictionary I have exported from another dictionary which
can be used free. Then I wrote a Java application that creates index files for the Android
dictionary, in order to let the search be faster in the dictionary then. In the course of planning
http://translate.google.hu/#hu|en|�http://developer.android.com/�
-
13
of the dictionary, because this is a mobile platform, I kept to the fore the possibly fastest
operation and the efficient management with the available resources. The preparation of a
beautiful attractive and much easily and more comfortable user interface was an additional
viewpoint.
After the theoretcal description the known and used tools, considerations, that on the
basis of I prepared my a application are discussed in details. I built quite a few attractive
functions into the applications, to make the acquaintance of this mobile platform in this
manner desiring mood may be received after the examination of this document to starting of
the software development on this platform.
-
14
Bevezetés: A mobil telefonokon elérhető különböző operációs rendszerek széles választéka több
problémát vet fel az adott platformra fejleszteni vágyók számára. Mint például a fellépő
kompatibilitási gondok egy adott alkalmazás esetében, amikor ugyanazon operációs rendszer
különböző változatain kívánjuk futtatni. A mobil piac szétdaraboltsága miatt sokszor nem
található megfelelő alkalmazás a használni kívánt platformra.
A különböző operációs rendszerek más-más kinézettel rendelkeznek és használatuk
sokszor másfajta gondolkodást igényel. Ezen problémák orvoslására lett kifejlesztve a Google
által 2008 októberében bemutatott mobil eszközökre szánt Android operációs rendszer. A
platform azóta nagyon gyorsan fejlődik, köszönhetően annak, hogy nyílt forráskódú a teljes
rendszer.
A Google a fejlesztők munkájának megkönnyítése érdekében kiadott az Android
SDK-hoz egy Eclipse IDE-be beépülő ADT plugin-t. Ennek segítségével már Eclipse
környezetben tudunk fejleszteni, ami nagyon megkönnyíti és felgyorsítja a fejlesztés menetét.
A dolgozatban megismerkedtem ezen új mobil eszközökre szánt platform
programozásához szükséges alkalmazási és szoftverfejlesztői elemekkel. Részletesen
tárgyaltam a különböző elemek projektekben betöltött szerepét is. Ezek létfontosságú dolgok
a platformmal ismerkedők számára.
Az alapelemek ismertetése után a megszerzett tudás segítségével implementáltam egy
szótár alkalmazást az adott platformra. A szótár alkalmazás tervezésénél olyan igényt
szolgáltam ki, amire eddig nem volt megoldás az adott platformon. Egy a PC világában
ingyenesen használható szótár szókészletének kiexportálása után írtam egy Java alkalmazást,
ami megfelelő indexfájlokba rendezi a kinyert szókészleteket. Majd ezen módosított
szókészlet segítségével valósítottam meg a mobil eszközre szánt szótárt. Több egyéni
megoldást alkalmaztam az alkalmazás tervezése során, hogy a rendelkezésre álló szűkös
erőforrásokat minél jobban kihasználjam, valamint, hogy gyors legyen az alkalmazás.
A dolgozatban ismertetek jó pár, az alkalmazáskészítés során használt látványos
funkciót, amik kedvet csinálhatnak a téma iránt érdeklődőknek, hogy belekezdjenek ezen
platform mélyebb megismerésébe és az ezen történő szoftverfejlesztés megkezdésébe.
-
15
1 Vizsgálat 1.1 Már meglévő szótár alkalmazások vizsgálata
A munka kezdetén azt vizsgáltam, hogy milyen igény lenne egy magyar-angol szótár
elkészítésére. Az eredmény azt lett, hogy jelenleg a piacon jó pár megoldás létezik ezen igény
kiszolgálására. Ezen megoldások szinte mindegyike a Google Translate-ot használják, mint
szótárat. Így 51 nyelv között lehet oda-vissza fordítani.
1.1.1. ábra Google Translate támogatott nyelvei
Tehát tovább vizsgálódtam és az értelmező szótárakat vettem jobban szemügyre. A
piacon jó pár megoldás fellelhető különböző nyelvekre, mint például az angol, német, francia
stb. Többsége nem ingyenes és az ingyenesen hozzáférhető változatok egy rész is időkorláttal
van ellátva, csak pár napig használhatóak, utána regisztrálni kellene őket. Jelenleg magyar
változat értelmező szótárból nem létezik az Android operációs rendszerre, ezért az angol
változatok képességeit vizsgáltam meg közelebbről:
http://translate.google.com/�
-
16
Collins Cobuild Student Dictionary:
Ez a szótár intelligens keresési móddal rendelkezik. Miközben gépeljük a szöveget,
úgy frissül az alatta látható szólista. Amikor elegendő karaktert megadtunk, akkor az Enter
billentyű leütésével az épp aktuális lista első elemére lép a program. Ezután a listából a kurzor
billentyűkkel mozoghatunk, és a kívánt elemnél ismét Entert ütve kiírja a kiválasztott szó
jelentését. A felkínált listából a pozicionáló golyó segítségével is választhatunk, vagy pedig az
ujjunkat is használhatjuk a kiválasztáshoz az érintő képernyő segítségével. A listát görgetni is
lehet, ha sok a megjelenítendő szó, mivel nem fért ki egy képernyőre.
A szó kiválasztása után egy másik képernyőre jutunk, ahol különböző színekkel van
jelölve a szó maga, a szó többes száma, a szófaja. A szó kiejtése is meg van adva, és
formázatlan szövegként szerepel a szó jelentése.
1.1.2. ábra Collins Cobuild Student Dictionary kereső listája, szónézete és az adott ablakok alatt
a hozzájuk tartozó menük
-
17
A két képernyőhöz két külön menü tartozik. A listás képernyő menüje (bal oldalt)
tartalmaz egy History menüpontot, ahol a korábban keresett szavainkat tudjuk megtekinteni.
A már keresett szavak csak egyszer szerepelnek a megjelenített listában. Ez valószínűleg egy
halmaz objektum segítségével van megvalósítva, hogy ne legyen duplázódás a keresett szavak
között. A többi menüpont közül még a More dictionaries-t érdemes megemlíteni. Ennek
kiválasztására a készülék felmegy az Android Market-re és ott további különálló szótárakat
lehet letölteni. Ezek a szótárak külön alkalmazások, nem ezt a szótárt fogják bővíteni.
A kiválasztott szó képernyő menüje (jobb oldal) tartalmaz szintén egy History
menüpontot, ez ugyanazt teszi, mint a már előbb említett History menüpont. Van egy Back és
egy Foward menüpont. A Back menüpont hatására visszatérhetünk az előbbi listás
képernyőre. A Foward gombnak úgy tűnik nincs szerepe, mivel innen nem lehet további
keresést folytatni, csak úgy ha visszatérünk a listás nézethez. A List menüponttal szintén
vissza tudunk jutni a listás képernyőre, de erre használhatjuk még a készülék fizikai BACK
billentyűjét is. A More menüpontban szerepel pár menüpont a bal oldali menüből.
Mivel a szoftvert csak pár napig lehet szabadon használni, valószínű, hogy nem érhető
el benne minden funkció amíg nem regisztráltuk, mint ahogy a Foward gomb sem.
Összességében elég jól használható, habár a Back és Foward menüpontok, nem a
vártaknak megfelelően működnek. A felhasználó, ahogy én is, arra számítottam, hogy majd a
már listában látott előző, vagy következő szóra fog ugrani ezen menüpontok hatására.
Concise Oxford English Dictionary
Ezt a szótárt is valószínűleg ugyanaz a csapat készítette, a kinézetéből ítélve. A
menüpontok szinte ugyanazok, egy különbség van a Special topics. Ezt a menüpontont
kiválasztva újabb szógyűjteményeket találunk, amiben sajnos nem lehet keresni.
Collins English Thesaurus
Ez a szótár is nagyon hasonló az első szótárhoz. A kinézete teljesen megegyezik, mind
a listázó képernyő esetén, mind pedig a kiválasztott szó képernyő esetén. A menüpontok is
teljesen ugyanolyanok, amik az első szótár esetében már ismertetve voltak.
Az idegen nyelvű értelmező szótárakon túl tanulmányoztam még pár fordító szótárt is,
hogy lássam milyen hasznos funkciókat tartalmaznak, amiket érdemes lenne a saját készítendő
szótárba is implementálni.
-
18
HanDict
Ennek a szótárnak nagyon tetszetős felhasználói felülete van. Az áttünés effektus
tényleg rendkívüli élményt nyújt a keresés során. A szótár két szótárat tud használni, amikhez
interneten keresztül csatlakozik. Az egyik a Google Dictionary, a másik pedig a Wikipedia, az
utóbbinak csak nagyon kevés szavát találja meg. Némi vizsgálódás után kiderült, hogy az
eredeti oldal szókészletének egy töredékét használja csak ez a szótár. Például csak egy
találatot adott ki a H betű begépelése esetén, míg az eredeti Wikipedia oldalon sokkal több
találat szerepel ugyanezen betűre.
1.1.3. ábra Handict szótár menüje, szókereső listája, szónézete és a Setting menüpontja
A szónézetben megjelenített kiejtés karakterek sem helyesen jelennek meg. A szótár
Setting menüpontjára kattintva a jobb szélső képernyőt kapjuk. Itt lehet beállítani, hogy melyik
szótárakat használja. A Show on notification bar pontot kikapcsolva, a szótár ikonja nem lesz
látható a Notification bar-ban, ami a képernyő tetején található. A Clear menüpont törli, a
kereső szövegdoboz tartalmát. A Hide eltünteti az egész szótárt, ha nem volt bejelölve a Show
on notfication bar, akkor nem lehet látni az ikonját a bal felső sarokban, vagyis a Notification
bar-ban. Ha be volt kapcsolva, akkor miután a Notification bar-t lehúzzuk látható válik a
program. Ha itt kiválasztjuk a programot, akkor a szótár már ismert üres keresődoboza fogad
bennünket. A Quit menüpont kilép a programból. Az About menüpont pedig információt ad az
alkalmazásról.
Összességében habár elég tetszetős a kinézete, sok dologra nem lehet használni ezt a
szótárt, és van benne egy két fölösleges menüpont.
http://www.google.com/dictionary�http://en.wikipedia.org/�
-
19
StarTranslate
Ez a szótár szintén tetszetős felhasználó felülettel rendelkezik, de az előzővel
ellentétben ebben sok hasznos funkció található.
1.1.4. ábra StarTranslate szótár és fordító felhasználói felülete és funkciói
A szótár elindítása után a bal felső képen látható képernyő fogad bennünket, ha azt
állítottuk be az indításkor felugró ablakban, hogy ezt a képernyőt lássuk alapértelmezettként,
amikor elindítjuk a StarDict-et. Ezen a képernyőn rengeteg nyelv között lehet fordítást kérni,
de nem található meg az összes nyelv, ami a Google Translate oldalán elérhető. Bal oldalról
harmadik képen láthatjuk a magyar Keresés szó japánra fordítását. A japán karakterek
megfelelően jelennek meg, nem pedig üres négyzetként, mint ahogy az előző szótár kiejtés
részénél láthattuk. Minden keresés a History listában letárolódik, ennek tartalmát az első
keresés után a jobb felső képen láthatjuk, a magyar Keresés szót kerestük és ennek tartalma
szerepel a listában. Az adott szóra kattintva a History listában a keresési paraméterek és
eredmények újra betöltődnek a keresési ablakba. A History lista a szótár leállítása után is
megmarad, tehát minden egyes leállításkor lementődik, majd minden egyes indításkor újra
betöltődik az alkalmazásba. Viszont ellentétben a már előbb ismertetett szótárral, ennek a
History listájában többször is szerepelhet ugyanaz a szó.
-
20
A bal alsó képen láthatjuk a Google Dictionary-t használó kereső képernyőt. A keresés
rendkívül ötletesen van megvalósítva. Amint látható a mellette szereplő képen a world szó
keresésére megnyitja a Google Dictionary weboldalát egy böngésző nézetben. A keresett
szóval és fordítási irány paramétereivel pedig kitölti a szükséges mezőket, így bennünket az
oldal betöltésekor már a kész eredmény fogad, az adott web nézetet kedvünk szerint
görgethetjük. A következő képen látható az alkalmazás menüje, ezek közül több funkció
közvetlenül gombok segítségével is meghívható a keresési felületekről. A jobb szélső képen
pedig a már lefordított szöveget tudjuk elküldeni valakinek SMS-ben.
Az alkalmazás menüjének hat menüpontjából négy menüpont funkciója a már említett
keresési felületre kihelyezett gombok segítségével kivitelezhetők. A menüpont közül a Clear
History és a More menüpontok csak a menüből érhetőek el.
A keresési felületre kihelyezett négy gomb balról indulva: Translate SMS, Sending by
SMS, Show history, Dictionary. A More menüpontban még három menüpontot találunk: Send
by Email, Help és az About.
A különböző menüpontok magukért beszélnek, a Help-je is jól összeállított.
Összességében talán annyi hátránya van az egész szótárnak, hogyha nincs internet kapcsolat
akkor lehal az egész, mert minden adatott a hálózatról kér le, vagy tölt fel.
WordMate
Ez a szótár alkalmazás lényegét tekintve internet kapcsolat nélkül működik a mobil
készüléken tárolt szólistáit használva. Kezdetben egy kis alap szógyűjteménnyel települ az
Android Market-ből, de később a Dict Downloader menüpont segítségével lehet bővíteni a
szógyűjteményt. Egy már letöltött szógyűjteményt kiválasztva, az adott szógyűjteményhez
tartozó összes szót betölti a görgető listába, aminek tartalma dinamikusan változik, a felette
található kereső szövegmezőbe begépelt karakterektől függően.
Balra a kereső szövegmező mellett található a szótárak váltására szolgáló gomb. A
betöltött szótárban a fenti szövegmezőbe karaktereket gépelve lehet keresni. E begépelt
karakterektől függően a megfelelő helyre ugrik a listában a kurzor.
Egy adott szót kiválasztva a kép bal középső ablakát kapjuk. A mellette látható képen
szerepel ennek a nézetnek a menüje: About, Settings, Dict Downloader, Dict info, Prev word,
Next word
-
21
1.1.5. ábra WordMate szótár felhasználói felülete, menüi és funkciói
-
22
A Settings menüpontra kattintva a jobb középső ablakot kapjuk. Ebben két dolgot
lehet beállítani. Az egyik, hogy engedélyezzük-e a szavakkal teli görgetősáv megjelenítését,
ami segít a szó megtalálásában. A másik pedig a frissítésekről történő értesítés engedélyezés.
A görgethető listás szókereső nézetben a bal alsó képen látható menüt kapjuk. Ezek
ugyanúgy megtalálhatók a már említett szónézetben. A mellette található képen láthatjuk,
hogy mi történik, ha a Dict downloader menüpontra kattintunk. Egy görgethető lista jelenik
meg, amiben a feltelepíthető szókészletek szerepelnek. Adott szókészletet kijelölve
megkezdődik annak a letöltése, majd miután letöltődött elérhetővé válik az alkalmazás
szótárválasztó listájában, ami t a már említett szövegdoboztól balra található gomb
segítségével lehet előhozni. A letöltés állapotáról a Notification bar-ban kaphatunk
információt, ami a jobb alsó képen látható. A szövegdoboz mellett található jobbra még két
gomb. A nagyító képet tartalmazó gomb a már begépelt karakterektől függően, megjeleníti a
betöltött szótárban található legelső ilyen szót a már ismertetett szónézetben. A piros x-t
tartalmazó gomb pedig törli a szövegdoboz tartalmát és az aktuális szótár legelső elemére
ugrik a lista. Úgy tűnik, az adott szótár összes elemét betölti a szövegdoboz alatt található
listába.
Összességében nagyon jól kezelhető és gyors szótár alkalmazás, az külön pozitívum,
hogy megjegyzi a kilépés előtti állapotot. Tehát amikor újra elindítjuk, akkor az utoljára
keresett szón fog állni a lista. Nagy előnye, hogy a szókészleteket a gépen tárolja, így nincs
szüksége internet kapcsolatra a keresés során. Egyedüli negatívum, hogy nincs benne History
menüpont.
Összegzés
Mivel a vizsgálataimat csak Android-ra készített szótárakon végeztem, így az itt
látható megoldások szintén megvalósíthatóak lesznek majd a elkészülő szótár alkalmazásban.
A már ismertetett hasznos funkciókat amennyire lehetséges implementálni fogom a szótár
alkalmazásomba.
-
23
2 Platform megismerése 2.1 Mi az Android?
Az Android egy mobil készülékekre szánt szoftver készlet, ami tartalmaz egy
operációs rendszert, middleware-t és kulcsfontosságú alkalmazásokat. Az Android SDK olyan
eszközöket és API-kat biztosít, amik szükségesek az Android platformra történő
alkalmazásfejlesztés elkezdéséhez. A fejlesztés Java programnyelvet folyik.
2.1.1 Android jellemzői
• Alkalmazás keretrendszer, ez lehetővé teszi a komponensek újrafelhasználását és
cseréjét.
• Dalvik virtuális gép, ez mobil készülékekre van optimalizálva. • Integrált böngésző, ez egy nyílt forrású WebKit motor alapján készült.
• Optimalizált grafika, meg egy hagyományos 2D-s grafikus könyvtárral van
meghajtva; a 3D-s grafika az OpenGL ES 1.0 specifikáción alapul (opcionális hardvergyorsítás).
• SQLite, ez strukturált adattárolást tesz lehetővé.
• Média támogatás, támogatja a népszerű audio, video és képformátumokat (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF).
• GSM tárcsázási beállítások (hardverfüggő).
• Bluetooth, EDGE, 3G és WiFi (hardverfüggő).
• Camera, GPS, iránytű és gyorsulásmérő (hardverfüggő).
• Gazdag fejlesztői környezet, ez tartalmaz egy emulátort a készülékekre,
hibakereső eszközöket, memória és teljesítmény optimalizálókat és az Eclipse IDE
számára egy plugin-t.
http://webkit.org/�
-
24
2.1.2 Android architektúrája
A következő diagram ismerteti az Android operációs rendszer főbb komponenseit.
2.1.2. ábra Android operációs rendszer felépítése
2.1.3 Applications (Alkalmazások)
Az Android számos alapalkalmazással érkezik, ezek alatt az email klienst, az SMS
programot, a naptárt, a térképeket, a böngészőt, a névjegyzéket és másokat kell érteni. Minden
alkalmazás Java programnyelven íródott.
2.1.4 Application Framework (Alkalmazás Keretrendszer)
A fejlesztőknek teljes hozzáférése van ugyanazon keretrendszer API-jaihoz, amiket az
alapalkalmazások használnak. Az alkalmazás architektúra úgy lett tervezve, hogy
egyszerűsítse a komponensek újrafelhasználását. Bármely alkalmazás publikálhatja az
képességeit és bármely más alkalmazás használhatja azon képességeket (a keretrendszer által
kikényszerített biztonsági megszorításoktól függően). Ugyanez a működési elv engedi meg,
hogy a felhasználó lecserélje a komponenseket.
-
25
Az alatta elhelyezkedő össze alkalmazás szolgáltatások és rendszerek készletei, beleértve az
alább leírtakat:
• Views egy gazdag és kiterjeszthető készlet, amit arra lehet használni, hogy egy
alkalmazást építsünk. Itt beleértve a listákat, a rácshálókat, a szövegdobozokat, a
gombokat és akár még a beágyazott web böngészőt is.
• Content Provider-ek engedélyezik az alkalmazásoknak, hogy hozzáférjenek más
alkalmazoktól származó adatokhoz (mint például a Contacts (Névjegyzék)), vagy
megosszák más alkalmazásokkal a saját adataikat.
• A Resource Manager gondoskodik a nem kód erősforrásokhoz való hozzáférésről,
mint például a helyhez kötött string-ek, a grafikák és a képernyő elrendezés fájlok.
• A Notification Manager engedélyezi minden alkalmazásnak, hogy
figyelmeztetéseket jeleníthessen meg az állapotsávban.
• Az Activity Manager kezeli az alkalmazások életciklusát és egy közösen használható
navigációs háttérvermet biztosít számukra.
2.1.5 Libraries (Könyvtárak)
Az Android C és C++ könyvtárakból álló készleteteket tartalmaz, amiket az Android
rendszer különféle komponensei használnak. Ezen szolgáltatások a fejlesztők rendelkezésére
állnak az Android alkalmazási keretrendszeren keresztül.
A most következő listában ismertetve van néhány alapvető könyvtár:
• Felszín kezelő - A kijelző alrendszerhez történő hozzáférést kezeli, és zökkenőmentes
vegyíti több alkalmazástól származó 2D-s és 3D-s grafikus rétegeket.
• Média könyvtár – PacketVideo OpenCore-ja alapján. A könyvtárak támogatást
nyújtanak több népszerű audio és video formátum lejátszásához és felvételéhez,
továbbá a statikus képfájlok megtekintésére is lehetőséget ad, itt beleértve az MPEG4, H.264, MP3, AAC, AMR, JPG és a PNG fájlformátumokat.
• SQLite – Egy minden alkalmazás számára elérhető, erős és könnyűsúlyú relációs
adatbázis motort biztosít.
• 3D könyvtárak – OpenGL ES 1.0 API-kon alapuló implementáció. A könyvtárak a
hardveres 3D gyorsítást (ahol elérhető), vagy a zárt, magasan optimalizált 3D
szoftveres raszterezést használják.
• FreeType – Bittérképes és vektoros betűtípusok képreprodukciói.
• LibWebCore – Ez egy modern web böngésző motor, ez üzemelteti az Android
böngészőt és az alkalmazásokba beágyazott web nézetet is.
• SGL – A 2D-s grafika alapjául szolgáló motor.
http://developer.android.com/guide/tutorials/views/index.html�http://developer.android.com/guide/topics/providers/content-providers.html�http://developer.android.com/guide/topics/resources/resources-i18n.html�http://developer.android.com/reference/android/app/NotificationManager.html�http://developer.android.com/reference/android/app/Activity.html�
-
26
• C rendszerkönyvtár – Egy BSD-ből származtatott szabványos C rendszerkönyvtár (libc) implementációja, amit beágyazott Linux alapú készülékekre hangoltak.
2.1.6 Android Runtime (Android Futtatókörnyezet)
Az Android tartalmazza az alapvető könyvtárak egy olyan készletét, ami elérhetővé
teszi a Java programozási nyelv alapvető könyvtárai által kínált funkcionalitások legtöbbjét.
Minden Android alkalmazás a saját process-ét futatja a saját Dalvik VM (Virtual
Machine) példányával. A Dalvik úgy lett megírva, hogy a készülék több VM-et tud
hatékonyan egyszerre futtatni. A Dalvik VM Dalvik Executable (.dex) formátumú fájlokat hajt
végre, amik minimális memória lábnyomra vannak optimalizálva. A VM regiszter alapú és a
Java nyelv fordítója által lefordított osztályokat futtatja, amik a benne található "dx" eszköz
segítségével át lesznek alakítva .dex formátumra.
A Dalvik VM a Linux rendszermag mögöttes funkcionalitásaira támaszkodik, mint
például a szálkezelés és az alacsony szintű memóriakezelés.
2.1.7 Linux Kernel (Linux Rendszermag)
Az Android alapvető rendszerszolgáltatások terén a Linux 2.6-os verziójára
támaszkodik, mint például a biztonság, a memóriakezelés, a folyamatkezelés, a hálózatverem
és a driver modell. A kernel ezenfelül egy absztrakciós rétegként is szolgál a hardver és
szoftververem maradéka között.
-
27
3 Az Android alkalmazás alapelemei Az Android alkalmazások Java programozási nyelven vannak megírva. A lefordított
Java kód, valamint bármi egyéb az alkalmazás számára szükséges adatokkal vagy
erőforrásfájlokkal együtt egy Android csomagba vannak kötegelve az aapt eszköz
segítségével. Ezen archív fájl .apk kiterjesztéssel van jelölve. Ez a fájl a szállítóeszköz az
alkalmazás terjesztése és a mobil eszközökre történő telepítése során. Ezt a fájlt töltik le a
felhasználók a készülékeikre. Egy .apk fájlon belül található minden kód egy alkalmazásnak
tekintendő.
Sok szempontból, minden egyes Android alkalmazás a saját világában él:
• Alapértelmezés szerint, minden alkalmazás saját Linux process-t futat. Az Android
akkor indítja a process-t, amikor valamilyen alkalmazáskódot végre kell hajtani, és
akkor állítja le a process-t, amikor már nincs rá szükség és a rendszererőforrásokat
más alkalmazások igénylik.
• Minden egyes process-nek saját Java Vitual Machine-ja (VM) van, tehát az
alkalmazás kódja elkülönülten fut minden más alkalmazás kódjától.
• Alapértelmezés szerint, minden egyes alkalmazáshoz egyedi Linux felhasználói ID
van hozzárendelve. A hozzáférési jogosultságok így be vannak állítva,
alapértelmezésben az alkalmazás fájljait csak a felhasználó és maga az alkalmazás
láthatja. Azonban lehetőség van más alkalmazásokba is exportálni az adatokat.
Arra is lehetőség van, hogy két alkalmazás ugyanazon felhasználói ID-n osztozzon.
Ezen esetben képesek lesznek egymás fájljait is látni. A rendszer erőforrásainak megóvása
érdekében, az alkalmazások ugyanazon ID-n osztozhatnak és egy közös Linux process-ben
futhatnak, így ugyanazon VM-en osztoznak.
3.1 Alkalmazáskomponensek Az Android központi sajátsága, hogy egy alkalmazás használhatja más alkalmazások
elemeit (ezen alkalmazásoknak engedélyezniük kell a szolgáltatást). Például ha az
alkalmazásnak szüksége van egy képeket görgető listára és más alkalmazás már rendelkezik
egy megfelelő görgetővel és az elérhető többi alkalmazás számára, akkor a görgető
meghívható, hogy végezze el a munkát, ahelyett, hogy sajátot kellene fejleszteni a feladatra.
Az alkalmazás nem tartalmazza vagy csatolja a saját kódjához a másik alkalmazás kódját.
Ehelyett csak elindítja a másik alkalmazás egy példányát, amikor az szükségessé válik.
Ezen feladat elvégzéséhez a rendszernek képesnek kell lennie alkalmazás process-t
indítania, amikor annak bármely részére szükség van és példányosítani a Java projekteket azon
-
28
részre. Emiatt eltérően más rendszerek alkalmazásaitól, az Android alkalmazásoknak nincs
egy adott belépési pontjuk az alkalmazáson belül szereplő minden komponens számára (
például nincs main() metódus). Inkább alapvető komponensi vannak, amiket a rendszer
példányosítani tud és futatni, ha szükséges. A következőkben ismertetve lesznek az
alapkomponensek.
3.1.1 Activities (Aktivitások)
Egy Activity egy olyan vizuális felhasználói felületét reprezentál, amit a
felhasználó általában egy képernyőn lát. Például, egy Activity reprezentálhatja
menüpontok egy listáját, amiből a felhasználó választhat, egy másik Activity pedig
képeket jeleníthet meg azok képaláírásaival együtt. Egy szöveges üzenetküldő
alkalmazásnak több Activity-je lehet, ezek közül az egyik Activity mutathatja a
Contacts (Névjegyzék) listáját, hogy kiknek küldhetjük az adott üzenet. Egy másik
Activity-vel pedig üzenetet írhatunk a kiválasztott Contact-hoz. Egy harmadik
Activity-vel pedig visszanézhetjük a már elküldött, vagy kapott üzeneteket. Egy
negyedik Activity-vel pedig az alkalmazás beállításain változtathatunk. Ezen Activity-
k, habár együtt dolgoznak, hogy egy összefüggő felhasználó felületet formáljanak,
mindegyik Activity független a többitől. Mindegyik az Activity alaposztály
alosztályaként van implementálva.
Lehet, hogy az alkalmazás csak egy darab Activity-t tartalmaz. Viszont
általában az alkalmazások több Activity-ből állnak, mint a már említett szöveges
üzenetküldő alkalmazás is. Hogy milyen Activity-k vannak, és hogy mennyien, az
természetesen függ az alkalmazástól és annak tervezésétől. Az Activity-k közül az
egyiket meg kell jelölni, hogy amikor elindul az alkalmazás, akkor a felhasználónak a
kijelölt Activity jelenjen meg elsőként a képernyőn. Az egyik Activity-ből egy
másikba való átmenet úgy van megoldva, hogy az épp futó Activity indítja a
következő Activity-t.
Mindegyik Activity kap egy alapértelmezett ablakot, amiben helyet foglal.
Általában ez az ablak kitölti a teljes képernyőt, de az is lehet, hogy kisebb, mint a
képernyő és így lebeg egy másik ablak tetején. Egy Activity szintén használhat
további ablakokat, mint például egy előugró párbeszédablak, amire a felhasználónak
reagálnia kell majd. Ez a párbeszédablak az épp futó Activity ablakának közepén
jelenik meg. Az Activity akár hívhat egy olyan ablakot is, ami fontos információkat
nyújt majd a felhasználónak, amikor egy konkrét elemet kiválaszt az épp látott
ablakban.
http://developer.android.com/reference/android/app/Activity.html�
-
29
Az ablak vizuális tartalmát View-ok egy hierarchiája szolgáltatja, a View
objektumok a View osztály leszármazottjai. Mindegyik View egy konkrét
négyszögletes teret vezérel a látott ablakon belül. A szülő View-ok tartalmazzák és
rendezik a gyerekeik Layout-jait. Az adott hierarchia levél View-jai (amik a hierarchia
alján vannak) berajzolják azon négyszögletes területeket, amik majd ténylegesen
válaszolnak a felhasználó tevékenységeire az adott képernyőterületen belül. Így a
View-ok, azok a helyek, ahol az Activity felhasználóval történő interakciói
végbemennek. Például lehet, hogy egy View megjelenít egy kicsi képet, és majd
végez egy műveletet, amikor a felhasználó megérinti az adott képet. Az Androidnak
számos kész View-ja van, amiket használni lehet. Ezeken a gombokat, a szöveg
mezők, a görgető sávokat, a menüpontok, a jelölőnégyzetek, és még egyebek kell
érteni.
Egy View hierarchiát az Activity.setContentView() metódussal lehet az
Activity ablakán belülre helyezni. A content view egy View objektum a hierarchia
gyökerénél.
3.1.2 Services (Szolgáltatások)
Egy Service-nek nincs vizuális felhasználói felülete, ehelyett a háttérben fut
meghatározatlan ideig. Például háttérzenét játszhat, miközben a felhasználó más
dolgokkal foglalatoskodik, vagy adatokat hívhat le a hálózaton keresztül, vagy
kiszámíthat valamit és az eredményt azon Activity-knek szolgáltatja, amik épp
igénylik azt. Mindegyik Service kiterjeszti a Service alaposztályt.
Szemléltetés gyanánt az első példa legyen egy médialejátszó, ami dalokat
játszik egy listáról. A lejátszó alkalmazásnak valószínűleg egy vagy több Activity-vel
kell rendelkeznie. Ezek lehetővé teszik a felhasználónak, hogy dalokat választhasson
és elkezdhesse lejátszani őket. Mindamellett, a zenelejátszást magát nem egy Activity
kezelné, mivel a felhasználók arra számítanak, hogy a zene továbbra is megy, miután
kilépnek a lejátszóból és valami másba kezdenek. Azért, hogy a zene lejátszása
folytatódjon, a média lejátszó Activity elindíthat egy Service-t, hogy az a háttérben
fusson. Ekkor a rendszer futó állapotban tartaná a zenelejátszó Service-t, még azután
is, miután az Activity, ami elindította, eltűnik a képernyőről.
Lehetőség van csatlakozni (kötődni) egy már folyamatban lévő Service-hez
(és elindítani a Service-t, ha még nem futna). Amíg kapcsolatban van a felhasználóval,
addig a felhasználó tud kommunikálni a Service-el azon az interfészen keresztül, amit
a Service a felhasználó rendelkezésére bocsájt. A zenei szolgáltatás esetében, az
http://developer.android.com/reference/android/view/View.html�http://developer.android.com/reference/android/app/Activity.html#setContentView%28android.view.View%29�http://developer.android.com/reference/android/app/Service.html�
-
30
interfész megengedheti a felhasználóknak a lejátszás szüneteltetését, visszatekerését,
leállítását és a újraindítását.
Hasonlóan az Activity-khez és más komponensekhez, a Service-ek is az
alkalmazás process fő szálában futnak. Tehát nem fognak más komponenseket, vagy a
felhasználói felületet blokkolni. Gyakran hoznak létre más szálakat az időigényes
feladatoknak (mint például a zenelejátszó).
3.1.3 Broadcast Receivers (Szórt üzenet fogadók)
A Brodacast Receiver egy olyan komponens, ami nem csinál semmit, csak
fogadja és válaszol a Broadcast értesítésekre. Sok Broadcast a rendszerkódból érkezik.
Például ezek lehetnek értesítések az időzóna megváltozásáról, az alacsony
akkumulátor szintről, egy fénykép elkészültéről, vagy arról, hogy a felhasználó
megváltoztatta a nyelvi beállításokat. Az alkalmazások Broadcast-okat
kezdeményezhetnek, például tudathatják más alkalmazásokkal, hogy valamilyen adat
letöltődött az eszközre és az felhasználható számukra.
Egy alkalmazásnak akármennyi Broadcast Receiver-je lehet, hogy válaszoljon
a fontosnak tekintet értesítésekre. Minden Broadcast Receiver kiterjeszti a
BroadcastReceiver alaposztályt.
A Broacast Receiver-ek nem jelenítenek meg felhasználói felületet. Azonban
elindíthatnak egy Activity-t, hogy válaszoljanak a kapott információkra, vagy
használhatják a NotificationManager-t, hogy értesítsék a felhasználót az adott
eseményről. Az értesítések különböző módszerekkel kelthetik fel a felhasználó
figyelmét. Például a háttérvilágítás villogtatásával, a készülék vibrálásával, egy hang
lejátszásával és így tovább. Rendszerint egy állandó ikont rak az állapotsorba, amit a
felhasználó megnyithat, hogy megkapja az adott üzenetet.
3.1.4 Content Providers (Tartalomszolgáltatók)
Egy Content Provider más alkalmazások számára elérhető alkalmazásadatok
konkrét készletét hozza létre. Ezeket az adatok eltárolhatja a fájlrendszerben, egy
SQLite adatbázisban, vagy bármilyen más módon, aminek van értelme. Az adott
Content Povider kiterjeszti a ContentProvider alaposztályt, hogy megvalósítsa annak
szabványos metódusainak olyan készletét, amik lehetővé teszik más alkalmazásoknak,
hogy kinyerjék és letárolják az vezérelt adattípusokat. Azonban az alkalmazások nem
hívhatják közvetlenül ezeket a metódusokat. Helyette egy ContentResolver objektum
metódusait hívhatják. Egy ContentResolver képes beszélni bármilyen Content
http://developer.android.com/reference/android/content/BroadcastReceiver.html�http://developer.android.com/reference/android/app/NotificationManager.html�http://developer.android.com/reference/android/content/ContentProvider.html�http://developer.android.com/reference/android/content/ContentResolver.html�
-
31
Provider-rel és együttműködik az adott szolgáltatóval, hogy a folyamatközi
kommunikációt vezérelje.
Amikor van egy olyan kérés érkezik, amit egy konkrét komponensnek kellene
lekezelnie, az Android megbizonyosodik afelől, hogy az adott komponensnek fut-e az
alkalmazás process-e, és elindítja ha szükséges. Aztán megnézi, hogy elérhető-e egy megfelelő
komponenspéldány, ha pedig nem, akkor létrehoz egy megfelelő példányt.
3.1.5 Aktiváló komponensek: Intent-ek
A tartalomszolgáltatók akkor aktiválódnak, amikor megcélozza őket egy
ContentResolver-től érkező kérés. A már említett másik három komponens – Activity-k,
Service-ek és Broadcast Receiver-ek – aszinkron üzenetekkel lesznek elindítva. Ezen
aszinkron üzeneteket Intentek-nek hívják. Az adott Intent egy Intent objektum, ami az adott
komponens számára küldendő üzenet tartalmát tárolja. Az Intent-ek megnevezik az Activity-k
és Sercice-k számára kért műveleteket, és többek között az adatok URI-jának specifikálásában
van szerepük. Például egy adott Intent lehet egy közvetítési kérelem az Activity-nek, hogy az
Activity képeket jelenítsen meg a felhasználónak, esetleg az Activity adjon módot a
felhasználónak szöveg bevitelére. A Broadcast Receiver-eknek az Intent objektum megnevezi
a kihirdetett műveletet. Például közölheti az érdekelt felekkel, hogy a kamera gombja le volt
nyomva.
Elkülönített metódusok vannak mindegyik komponenstípus aktiválására:
• Egy Activity elindítható (vagy valami új hozzáadható a teendőkhöz), egy Intent
átadásával a Context.startActivity()-nek, vagy a
Activity.startActivityForResult()-nak. A válaszoló Activity
megnézheti a kezdeti Intent-et, ami az elindítását okozta, a getIntent() metódus
hívásával. Az Android meghívja az Activity onNewIntent() metódusát, hogy
átadjon valamennyi elkövetkező Intent-et.
Általában egy Activity indítja a következő Activity-t. Ha eredményt vár vissza az
elindított Activity-től, akkor a startActivityForResult() metódust hívja
meg a startActivity() metódus helyett. Például, ha az adott Activity egy olyan
Activity-t indít el, ami lehetőséget kínál a felhasználónak, hogy egy fotót kiválasszon,
akkor számíthat arra, hogy az a kiválasztott fotót adja majd vissza az adott Activity. A
eredményt egy Intent objektumban adja vissza, ami átadódik a hívó Activity
onActivityResult() metódusának.
• Egy Service elindítható (vagy új utasítások adható egy már folyamatban levő Service-
hez) egy Intent objektum átadásával a Context.startService()-nek. Az
http://developer.android.com/reference/android/content/Intent.html�http://developer.android.com/reference/android/content/Context.html#startActivity%28android.content.Intent%29�http://developer.android.com/reference/android/app/Activity.html#startActivityForResult%28android.content.Intent,%20int%29�http://developer.android.com/reference/android/app/Activity.html#getIntent%28%29�http://developer.android.com/reference/android/app/Activity.html#onNewIntent%28android.content.Intent%29�http://developer.android.com/reference/android/app/Activity.html#onActivityResult%28int,%20int,%20android.content.Intent%29�http://developer.android.com/reference/android/content/Context.html#startService%28android.content.Intent%29�
-
32
Android meghívja a Service onStart() metódusát és átadja az Intent objektumot.
Hasonlóképpen, egy Intent átadható a Context.bindService()-nek, hogy
kiépítsen egy folyamatban lévő kapcsolatot a hívó komponens és a cél Service között.
A Service megkapja az Intent objektumot egy onBind() hívásban. Ha a Service
még nem fut, akkor a bindService() elindíthatja. Például egy Activity kiépíthet
egy kapcsolatot a már korábban említett zene lejátszás Service-el, így a
felhasználónak a lejátszás vezérlésére lehetőséget (egy felhasználó felületet)
biztosíthat. Az Activity hívhatná a bindService()-t, hogy összeállítsa az adott
kapcsolatot, és aztán meghívja a Service által definiált metódusokat, amik hatással
vannak a lejátszásra.
• Egy alkalmazás egy Intent objektum átadásával kezdeményezhet egy Broadcast-ot,
amit a Context.sendBroadcast(),
Context.sendOrderedBroadcast(), és a
Context.sendStickyBroadcast() metódusok valamelyikének, vagy
mindegyikének átadhatja. Az Android az Intent-et az Broadcast Receiver-eknek azok
onReceive() metódusainak hívásával kézbesíti.
3.1.6 Komponensek leállítása
Egy Content Provider csak addig aktív, amíg válaszol a ContentResolver-től érkező
kérésre. Egy Broadcast Receiver csak addig aktív, amíg válaszol a Broadcast-okra. Tehát
nincs szükség explicit leállításra ezen komponensek esetén.
Az Activity-k viszont felhasználói felületet biztosítanak. Ezért hosszú ideig futó
üzenetváltásban vannak a felhasználóval és talán aktívak maradnak, még akkor is, amikor
üresjáratban kerülnek, és addig maradnak abban az állapotban, amíg nem folytatódik az
üzenetváltás a felhasználóval. Hasonlóképpen a Service-ek szintén hosszú ideig futnak. Így az
Android-nak vannak metódusai, hogy az Activity-ket és a Service-eket egy rendezett módon
leállítsa:
• Egy Activity leállítható a finish() metódusa hívásával. Egy Activity leállíthat egy
másik Activity-t is (amelyik a startActivityForResult()-el indítódott) a
finishActivity() hívásával.
• Egy Service leállítható a stopSelf() metódusa hívásával, vagy a
Context.stopService() hívásával.
A rendszer szintén leállíthatja a komponenseket, amikor már nem használják őket,
vagy amikor az Android-nak több aktív komponens számára memóriát kell visszanyernie.
http://developer.android.com/reference/android/app/Service.html#onStart%28android.content.Intent,%20int%29�http://developer.android.com/reference/android/content/Context.html#bindService%28android.content.Intent,%20android.content.ServiceConnection,%20int%29�http://developer.android.com/reference/android/app/Service.html#onBind%28android.content.Intent%29�http://developer.android.com/reference/android/content/Context.html#sendBroadcast%28android.content.Intent%29�http://developer.android.com/reference/android/content/Context.html#sendOrderedBroadcast%28android.content.Intent,%20java.lang.String%29�http://developer.android.com/reference/android/content/Context.html#sendStickyBroadcast%28android.content.Intent%29�http://developer.android.com/reference/android/content/BroadcastReceiver.html#onReceive%28android.content.Context,%20android.content.Intent%29�http://developer.android.com/reference/android/app/Activity.html#finish%28%29�http://developer.android.com/reference/android/app/Activity.html#finishActivity%28int%29�http://developer.android.com/reference/android/app/Service.html#stopSelf%28%29�http://developer.android.com/reference/android/content/Context.html#stopService%28android.content.Intent%29�
-
33
3.1.7 A Manifest fájl (Az Önleíró fájl)
Mielőtt az Android el tudna indítani egy alkalmazás komponenst, tudnia kell az adott
komponens létezéséről. Ezért az alkalmazásoknak deklarálniuk kell a komponenseiket a
Manifest fájlban ami az Android csomagba van csomagolva. Az .apk fájl a Manifest-en túl
tartalmazza az alkalmazás kódját, a fájljait és erőforrásait.
A Manifest egy strukturált XML fájl és mindig AndroidManifest.xml-nek van nevezve
mindegyik alkalmazásban. Számos dolgot csinál azonkívül, hogy az alkalmazás komponenseit
deklarálja. Például megnevezi az alkalmazás számára szükséges könyvtárakat (az
alapértelmezett Android könyvtáron kívül), amiket csatlakoztatni kell, valamint azonosít
bármilyen hozzáférési jogosultságot, amire az alkalmazás vár, hogy meg legyen adva.
Viszont a Manifest legfontosabb feladata, hogy értesítse az alkalmazás
komponenseiről az Andoidot. Például egy Activity deklarálható a következőképpen:
. . .
Az elem name attribútuma nevezi meg azt az Activity alosztályt, ami
megvalósítja az Activity-t. Az icon és label attribútumok azon erőforrás fájlokra
mutatnak, amik tartalmazzák azt az ikont és a címkét, amiket meg lehet jeleníteni az Activity
reprezentálásaként az alkalmazás indítójában a felhasználóknak.
Egyéb komponensek hasonló módon vannak deklarálva. A elemek a
Service-ek számára, a elemek a Broadcast Receiver-ek számára, és a
elemek a Content Provider-ek számára. Azon Activity-k, Service-ek és
Content Provider-ek, amik nincsenek deklarálva a Manifest-ben, nem láthatók a rendszer
számára és így következésképpen soha sem futnak le. Azonban a Broadcast Receiver-ek
deklarálhatók vagy a Manifest-ben, vagy dinamikusan létrehozhatók a kódban (mint
http://developer.android.com/guide/topics/manifest/activity-element.html�http://developer.android.com/reference/android/app/Activity.html�http://developer.android.com/guide/topics/manifest/service-element.html�http://developer.android.com/guide/topics/manifest/receiver-element.html�http://developer.android.com/guide/topics/manifest/provider-element.html�
-
34
BroadcastReceiver objektumok) és a rendszer a Context.registerReceiver()
hívásával regisztrálja őket.
3.1.8 Intent Filter-ek
Egy Intent objektum explicit meg tudja nevezni a célkomponenst. Ekkor az Android
megkeresi az adott komponenst (a Manifest fájlban található deklarációk alapján) és aktiválja
azt. Azonban, ha a cél nincs explicite megnevezve, az Android meg kell keresse a legjobb
komponenst, hogy válaszoljon az Intent-nek. Ezt úgy teszi, hogy összehasonlítja Intent
objektumot az Intent Filter-ek potenciális célpontjaival. A komponens Intent Filter-ei értesítik
az Android azon fajta Intent-jeit, amik képesek a komponenst lekezelni. Ugyanúgy, mint más
a komponenssel kapcsolatos alapvető információ esetén, ezek is deklarálva vannak a Manifest
fájlban.
Itt látható az előző példa egy bővítése, ami két Intent Filter-t ad az Activity-hez:
. . .
http://developer.android.com/reference/android/content/BroadcastReceiver.html�http://developer.android.com/reference/android/content/Context.html#registerReceiver%28android.content.BroadcastReceiver,%20android.content.IntentFilter%29�
-
35
A példában szereplő első Filter – az android.intent.action.MAIN művelet és
az android.intent.category.LAUNCHER kategória kombinációja – egy közönséges
Filter. Ez megmondja, hogy az Activity-t miként kellene reprezentálni az alkalmazás
indítóban. Az alkalmazásindító kilistázza a képernyőre azon alkalmazásokat amiket a
felhasználók el tudnak indítani a készüléken. Más szavakkal, ez az Activity az alkalmazás
belépési pontja, ezt láthatják a felhasználók először, amikor az alkalmazás indítóból
kiválasszák az alkalmazást. A második Filter egy műveletet deklarál, amit az Activity végre
tud hajtani egy konkrét adattípusra.
Egy komponensnek lehet akármennyi Intent Filter-je, mindegyik különböző
képességkészleteket deklarálhat. Ha nincs egy Filter-je sem, akkor csak olyan Intent-ek által
aktiválható, amelyek explicit megnevezik célnak az adott komponenst.
Egy Broadcast Reciver-re, ami a kódban lett létrehozva és regisztrálva, az Intent Filter
közvetlenül példányosítható, mint egy IntentFilter objektum. Minden más Filter a Manifest-
ben van beállítva.
3.2 Activity-k és task-ok Ahogy már említve volt korábban, egy Activity el tud indítani egy másikat Activity-t,
itt azt az esetet is beleértve, ha az egy másik alkalmazásban van definiálva az adott Activity.
Tételezzük fel például, hogy felhasználók szeretnék valamilyen hely utcatérképét
megjeleníteni. Már van egy Activity ami képes ezt megtenni, tehát mindegyik Activity-nek
csak annyit kell tennie, hogy összeállít egy Intent objektumot a kért információval és átadja a
startActivity()-nek. A térkép-megjelenítő majd megjeleníti a térképet. Amikor a
felhasználó a BACK billentyűt leüti, az Intent-et küldő Activity újra meg fog jelenni a
képernyőn.
A felhasználónak, úgy fog tűnni, mintha a térkép-megjelenítő ugyanazon alkalmazás
része lenne, mint az Activity. Még akkor is, ha más alkalmazásban lett definiálva a hívott
Activity, és annak az alkalmazás process-ében van futtatva. Az Android mindkét Activity
ugyanazon task-ban tartásával gondoskodik erről a felhasználói élményről. Egyszerűen egy
task-ba rakja azokat az Activity-ket, amit a felhasználó egy alkalmazásként észlel. Ezek
egymással kapcsolatban álló Activity-k egy csoportja ugyanazon verembe vannak rendezve. A
veremben található gyökér Activity az ami elkezdte a task-ot. Ez általában egy a felhasználó
által az alkalmazás indítóból választott Activity. A verem tetején található Activity az ami épp
futásban van, ez koncentrál a felhasználó műveleteire. Amikor az Activity elindít egy másikat,
az új Activity a verembe helyeződik, és ez lesz az épp futó Activity. Az előző Activity ami
http://developer.android.com/reference/android/content/IntentFilter.html�
-
36
elindította a veremben marad. Amikor a felhasználó megnyomja a BACK billentyűt, az
aktuális Activity kiolvasódik a veremből és az előző Activity továbbindul, mint futó
alkalmazás.
A verem objektumokat tartalmaz, tehát ha egy task-nak egynél több példánya van
ugyanazon megnyitott Activity alosztályból, például több térkép-megjelenítő, akkor a
veremnek külön bejegyzése van minden egyes objektumpéldányra. Az verem Activity-ei soha
nem rendeződnek újra, csak adatbeírás és adatkiolvasás történik.
A task az Activity-k egy verme, nem egy osztály, sem pedig egy elem a Manifest
fájlban. Tehát nincs mód arra, hogy egy task-ra az értékeket az Activity-eitől függetlenül
beállítsuk. A task számára az értékek teljes egészében be vannak állítva a gyökér Activity-
jében.
A task-ban található összes Activity együtt egy egységet alkot. A teljes task (a teljes
Activity verem) az előtérbe hozható, vagy a háttérbe küldhető. Például tételezzük fel, hogy az
aktuális task-nak négy Activity-je van a veremben, három az aktuális Activity alatt. A
felhasználó a HOME billentyűt megnyomására az alkalmazásindítóhoz jut, ott egy új
alkalmazást választ ki (ténylegesen egy új task-ot). Az aktuális task a háttérben fut tovább és
az új task gyökér Activity-je jelenítődik meg a képernyőn. Aztán, egy rövid idő után, a
felhasználó visszamegy a főoldalra és újra kiválasztja az előző alkalmazást (az előző task-ot).
A task, mind a négy Activity-vel a veremben az előtérbe jön. Amikor a felhasználó
megnyomja a BACK billentyűt a képernyő nem jeleníti meg azt az Activity-t, amit a
felhasználó épp elhagyott (a gyökér Activity-jét az előző task-nak). Inkább eltávolítja a verem
tetején található Activity-t és az ugyanazon task-ban található előző Activity-t jeleníti meg.
Az előbb leírt viselkedés az alapértelmezett viselkedés az Activity-k és a task-ok
számára. Azonban vannak módszerek arra, hogy szinte az összes aspektusát módosíthassuk
ezen viselkedésnek. Az Activity-k task-okkal történő társítása, és az Activity-k task-on belüli
viselkedése flag-ek együttműködéssel vannak vezérelve. Ezen flag-ek abban az Intent
objektumban vannak beállítva, ami elindította az Activity-t és az attribútumai az Activity
Manifest fájljának elemében vannak megadva. Mind a kérő, mind pedig a
válaszoló közli, hogy mi történik.
Ennek tekintetében, a legfontosabb Intent flag-ek:
• FLAG_ACTIVITY_NEW_TASK
• FLAG_ACTIVITY_CLEAR_TOP
• FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
• FLAG_ACTIVITY_SINGLE_TOP
http://developer.android.com/guide/topics/manifest/activity-element.html�
-
37
A legfontosabb attribútumok:
• taskAffinity
• launchMode
• allowTaskReparenting
• clearTaskOnLaunch
• alwaysRetainTaskState
• finishOnTaskLaunch
A továbbiakban le lesz majd írva, hogy mit csinál néhány flag és attribútum ezek
közül, valamint azt, hogy miként kommunikálnak egymással, és a használatuk során milyen
szempontokat kell figyelembe venni.
3.2.1 Affinity-k és új task-ok
Alapértelmezés szerint egy alkalmazásban található minden Activity-nek van affinity-
je egymásra, azaz ez egy környezeti beállítás mindegyikre, amik ugyanazon task-hoz
tartoznak. Azonban egy egyedi affinity beállítható mindegyik Activity-re az
elem taskAffinity attribútumával. A különböző alkalmazásokban definiált Activity-k
osztozhatnak egy affinity-n, vagy az ugyanazon alkalmazásban definiált Activity-k különböző
affinity-khez rendelhetők hozzá.
Egy affinity két körülmény esetén lép működésbe:
• Amikor az Intent objektum, ami elindít egy Activity-t, tartalmazza a
FLAG_ACTIVITY_NEW_TASK flag-et.
• Amikor egy Activity rendelkezik az allowTaskReparenting attribútummal és az
true-ra van állítva.
A FLAG_ACTIVITY_NEW_TASK flag:
Már említve volt, hogy egy új Activity alapértelmezésben azon Activity task-jában
indítódik, amit a startActivity() meghívott. Ugyanabba a verembe helyeződik,
ahol a hívó Activity is található. Azonban, ha az Intent objektum, ami át lett adva a
startActivity()-nek, tartalmazza a FLAG_ACTIVITY_NEW_TASK flag-et,
akkor a rendszer egy eltérő task-ot keres, hogy elhelyezze az új Activity-t. Gyakran,
ahogy a flag neve is utal rá, ez egy új task lesz. Azonban, nem feltétlenül kell annak
lennie. Ha már van ugyanazon affinity-vel létező task, mint amivel az új Activity is
rendelkezik, akkor az Activity abban a task-ban indítódik. Ha pedig nem létezik, akkor
új task-ot kezd az Activity.
http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK�
-
38
Az allowTaskReparenting attribútum:
Ha egy Activity rendelkezik az allowTaskReparenting attribútummal, és az
true-ra van állítva, akkor át tud mozogni azon task-ból, ami elindította azon task-ba
aminek lesz egy affinity-je amikor az adott task előtérbe kerül majd. Például
tételezzük fel, hogy egy Activity ami az időjárási viszonyokat jelenti a kiválasztott
városokra, egy utazás alkalmazás részeként lett definiálva. Ugyanazon affinity-vel
rendelkezik, mint az alkalmazásban található más Activity-k (ez az alapértelmezett
affinity) és engedélyezi a reparenting-et. Egyik Activity elindítja az időjárás-jelentést,
tehát ez kezdetben ugyanazon task-hoz tartozik, mint az Activity. Viszont amikor az
utazás alkalmazás legközelebb előtérbe kerül, a időjárás-jelentő újra hozzárendelődik
és megjelenítődik azon task-kal.
3.2.2 Indítási módok
Négy különböző indítási mód van, amik hozzárendelhetők egy elem
launchMode attribútumához:
• standard (az alapértelmezett mód)
• singleTop
• singleTask
• singleInstance
Ezen módok a következő négy pontban térnek el egymástól:
• Melyik task tartja meg azt az Activity-t, ami válaszol az Intent-re? A standard
és singleTop módokra, ez azon task ami elindította az Intent-et (vagyis a
startActivity()-t hívta), kivéve hogyha az Intent objektum tartalmazza a
FLAG_ACTIVITY_NEW_TASK flag-et. Ebben az esetben egy eltérő task lesz
kiválasztva, ahogy az már tárgyalva volt korábban.
Ezzel szemben a singleTask és a singleInstance módok megjelölik azon
Activity-ket, amik mindig a task gyökerében vannak. Egy task-ot definiálnak és soha
nem indítódnak egy másik task-ban.
• Lehet-e több példánya egy Activity-nak? Egy standard vagy singleTop
Activity sokszor példányosítható. Több task-hoz tartozhatnak, és egy adott task
rendelkezhet ugyanazon Activity több példányával.
Ezzel szemben, singleTask és a singleInstance Activity-k pontosan egy
példányra vannak korlátozva. Attól fogva, hogy ezek az Activity-k a task gyökerénél
vannak, ez a korlátozás azt jelenti, hogy soha nem lehet a task-nak egynél több
példánya egy adott időben a készüléken.
http://developer.android.com/guide/topics/manifest/activity-element.html#reparent�http://developer.android.com/guide/topics/manifest/activity-element.html#lmode�http://developer.android.com/reference/android/content/Context.html#startActivity%28android.content.Intent%29�http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK�
-
39
• A példánynak lehetnek-e más Activity-ei a task-jában? Egy singleInstance
Activity csak egyedüli példányként foglal helyet a task-ban. Ha egy másik Activity-t
indít, akkor az adott Activity eltérő task-ban fog indítódni tekintet nélkül annak az
Activity-nek az indításmódjára. Olyan ez mintha FLAG_ACTIVITY_NEW_TASK lett
volna az átadott Intent-ben. Minden más tekintetben a singleInstance mód
megegyezik a singleTask-kal.
A másik három mód megengedi, hogy több Activity tartozzon a task-hoz. A
singleTask Activity mindig a task gyökér Activity-je lesz, de el tud indítani más
Activity-ket is, amik a task-jához lesznek hozzárendelve. A standard és
singleTop Activity-k példányai bárhol megjelenhetnek a veremben.
• Indítódik új példánya az osztálynak, hogy lekezelje az új Intent-et? Az
alapértelmezett standard módban egy új létrejött példány válaszol minden új
Intent-nek. Minden példány csak egy Intent-et kezel. A singleTop módban egy
létező példányosztály lesz újrafelhasználva, hogy lekezelje az új Intent-et, ha az a cél
task Activity vermének a tetején tartózkodik. Ha nem a tetején tartózkodik nem lesz
újrafelhasználva. Inkább egy új példány lesz létrehozva az új Intent számára és a
verembe helyezve.
Például tételezzük fel, hogy a task Activity verme tartalmazza az A gyökér Activity-t
a B, a C és a D Activity-kkel, ebben a sorrendben. A D van a verem tetején, tehát a
verem tartalma A-B-C-D. Egy Intent érkezik a D típusú Activity számára. Ha D
rendelkezik az alapértelmezett standard indítási móddal, akkor az osztálynak egy
új példánya indítódik és a verem A-B-C-D-D lesz. Azonban, ha D indítási módja
singleTop, akkor a már létező példánytól várjuk, hogy lekezelje az új Intent-et
(attól fogva, hogy a verem tetején van), és a verem A-B-C-D marad.
Ha viszont egy B típusú Activity számára érkezik Intent, akkor a B egy új példánya
indítódik el, tekintet nélkül arra, hogy a B módja standard vagy singleTop (attól
fogva, hogy B nincs a verem tetején). Tehát az eredményül kapott verem A-B-C-D-B
lesz.
Már említve volt, hogy a singleTask vagy singleInstance Activity-knek
soha nincs egynél több példánya. Tehát az adott példánytól várhat�