120
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

Android operációs rendszert futató mobilkészülékre ...users.itk.ppke.hu/~tihanyia/GSMapp/AntalPéterDiplomaterv.pdf · A szótár alkalmazás szópárjainak listáját egy másik

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

  • 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�