JAVA. Real-Time Java

Podobné dokumenty
JAVA Android Java, letní semestr

JAVA. Real-Time Java

(c) Miroslav Balík, Ondřej Kroupa, Martin Pelant 11/29/ přednáška. Android projekt. Manifest. Activity. Uživatelské rozhraní (základy)

Začínáme s vývojem pro Android

Uživatelské rozhraní. Layouty FrameLayout LinearLayout RelativeLayout TableLayout ScrollView Taby Dialogy ViewFlipper 11/29/11

KMI / TMA Tvorba mobilních aplikací. 3. seminář ZS 2016/2017 Středa 13:15-15:45

KMI / TMA. Tvorba mobilních aplikací. 3. seminář ZS 2017/2018 ČTVRTEK 13:15-15:45

4. UŽIVATELSKÉ ROZHRANÍ

ANDROID. Ing. Ladislav Pešička

Android 100% Java telefon. Petr Musil

Obsah. Úvod 11. Vytvoření emulátoru 20 Vytvoření emulátoru platformy Android 4.4 Wearable 22 Spouštění aplikací na reálném zařízení 23

KMI / TMA Tvorba mobilních aplikací. 2. seminář ZS 2016/2017 Středa 13:15-15:45

KMI / TMA Tvorba mobilních aplikací

Obsah. Životní cyklus activity Context Intent Spouštění aktivit Interakce s uživatelem. Toast. (c) Miroslav Balík, Ondřej Kroupa, Martin Pelant

KMI / TMA Tvorba mobilních aplikací

Windows a real-time. Windows Embedded

Android za hranicemi Hello World

Programování v Javě I. Leden 2008

Programování v Javě I. Únor 2009

Příklad zobrazení toastu s vlastním designem

Úvod do programovacích jazyků (Java)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Podmínky na zápočet. Java, zimní semestr

Iterator & for cyklus

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Java a XML. 10/26/09 1/7 Java a XML

MATURITNÍ PRÁCE dokumentace

8 Třídy, objekty, metody, předávání argumentů metod

Úvod do programování v jazyce Java

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

JAVA Moduly Java, letní semestr 2018

Algoritmizace a programování

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

3. ŽIVOTNÍ CYKLUS ACTIVITY

JAVA Unit testing Java, zimní semestr

JAVA. Další jazyky kompilovatelné do Java byte-code

Obsah. LayoutInflater. UI model KeyEvent View Tvorba vlastních komponent Canvas Matrix Vlastní EditText

VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky Obor Aplikovaná informatika

Algoritmizace a programování

Teoretické minimum z PJV

Sem vložte zadání Vaší práce.

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

První kapitola úvod do problematiky

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Jazyk C# (seminář 6)

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Klient Stagu pro Android

GUI. Systémová integrace pro desktopové aplikace

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

11. Přehled prog. jazyků

Vytváření a použití knihoven tříd

Výčtový typ strana 67

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

11/29/11. (c) Miroslav Balík, Ondřej Kroupa, Martin Pelant. 12. Přednáška. Zjišťování polohy Google Mapy OverlayItem Zálohování.

Zápis programu v jazyce C#

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Úvod Seznámení s předmětem Co je.net Vlastnosti.NET Konec. Programování v C# Úvodní slovo 1 / 25

Úvod do programování - Java. Cvičení č.4

ZÁPADOČESKÁ UNIVERZITA V PLZNI FAKULTA ELEKTROTECHNICKÁ KATEDRA TECHNOLOGIÍ A MĚŘENÍ BAKALÁŘSKÁ PRÁCE

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

5. přednáška. Stylování a themování Themování Android Interface Definition Language Data Sdílení dat 11/29/11

1. Programování proti rozhraní

GUI. JavaFX. Java UI, letní semestr 2017/2018 1

TECHNOLOGIE RTSJ A JEJÍ UPLATNĚNÍ PŘI TVORBĚ APLIKAČNÍ A PREZENTAČNÍ VRSTVY PORTÁLOVÝCH ŘEŠENÍ

Programovací jazyk Java

UJO Framework. revoluční architektura beans. verze

PŘETĚŽOVÁNÍ OPERÁTORŮ

Real Time programování v LabView. Ing. Martin Bušek, Ph.D.

Úvod do programovacích jazyků (Java)

Využití ArcGIS Runtime SDK for Android při vývoji mapových aplikací

Android. Programujeme pro. Jiří Vávrů, Miroslav Ujbányai. DRUHÉ, rozší řené v ydání

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

IRAE 07/08 Přednáška č. 1

Vláknové programování část V

Diplomová práce. Rozvrh hodin pro

Obsah. Menu. ListView ListActivity Adapter. Ikonkové Rozšířené Submenu Kontextové. BaseAdapter ArrayAdapter CursorAdapter SimpleCursorAdapter 11/29/11

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Mobilní malware na platformě Android Přednáška 1. Ing. Milan Oulehla

1 Správce licencí Správce licencí Správce licencí Start > Všechny programy > IDEA StatiCa > Správce licencí Soubor > Správce licencí Licence

Generické programování

Software602 Form Designer

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE. Parametry okolních buněk

(c) Miroslav Balík, Ondřej Kroupa, Martin Pelant 11/29/ přednáška. Práce na pozadí. Služby. Notifikace

Nástroje pro vývoj a publikaci mobilní aplikace v Qt. Martin Straka

Nástroje pro vývoj a publikaci mobilní aplikace v Qt. Martin Straka

PB161 Programování v jazyce C++ Přednáška 7

Programátorská příručka

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

ZÁVĚREČNÁ STUDIJNÍ PRÁCE dokumentace

TÉMATICKÝ OKRUH Softwarové inženýrství

Transkript:

JAVA Real-Time Java

Real-time systém česky někdy jako systém reálného času ne-real-time systém systém funguje správně pokud dává správné výsledky real-time systém systém funguje správně pokud dává správné výsledky v požadovaném čase

Real-time systém příklad lékařské zařízení musí detekovat změny v pacientově stavu a včas reagovat zdroj obrázku Issovic, D.:Real-time systems, basic course

Real-time systém jinak... zdroj obrázku Issovic, D.:Real-time systems, basic course

Real-time systém příklad airbag se nesmí nafouknout ani příliš brzo ani příliš pozdě real-time rychle zdroj obrázku Issovic, D.:Real-time systems, basic course

Real-time systém soft real-time hard real-time safety-critical

Java a RT Java jednoduchá široce používaná množství knihoven portabilní ale není real-time plánování není podpora pro periodické vykonávání není podpora pro aperiodické události problémy s GC problémy s přímým přístupem do paměti problémy s ovládáním zařízení...

Garbage collector

Real-time Specification for Java RTSJ 1999 JSR-1 žádné změny v syntaxi rozšíření Javy o Thread Scheduling and Dispatching Memory Management Synchronization and Resource Sharing Asynchronous Event Handling Asynchronous Transfer of Control and Asynchronous Thread Termination High resolution time Physical and Raw Memory Access

RTSJ plánování Fixed-priority round robin plánovač lze přidat vlastní Minimálně 28 real-time priorit navíc k 10 základním Periodická vlákna mohou začít v určeném čase mají periodu a deadline Aperiodické události plánovatelný objekt, která je vykonán jako reakce na událost

RTSJ paměť NoHeapRealtimeThread vlákno bez přístupu k haldě nemůže být blokováno GC halda jako normálně immortal paměť nelze z ní objekty uvolňovat pro globální data scoped paměť regiony paměti objekty uvolněny naráz pokud všechna vlákna opustí region vhodné pro volání metod z std knihovny

RTSJ paměť pravidla pro reference mezi objekty

RTSJ problémy paměťové regiony jsou neintuitivní změny v klasickém programovacím modelu s GC přiřazení reference může selhat existují real-time garbage collectory

Ravenscar Java omezení RTJS inspirováno Ravenscar for Ada cíl lepší analyzovatelnost a predikovatelnost příklad omezení žádný GC

RTSJ RTSJ 2.0 JSR 282 draft Base Module Schedulables Events & Handlers Priority Inheritance Clock MemoryArea HeapMemory ImmortalMemory... Device Happenings RawMemory ISR (Option) Alternate Memory physical scoped POSIX POSIX signals

JAVA LeJOS

Přehled http://www.lejos.org/ firmware pro LEGO Mindstorm obsahuje Java virtual machine tj. LEGO roboty lze programovat v Javě

Příklad public static void main(string[] argv) { TouchSensor touchl = new TouchSensor(SensorPort.S4); TouchSensor touchr = new TouchSensor(SensorPort.S1); UltrasonicSensor sonar = new UltrasonicSensor(SensorPort.S2); Motor.A.forward(); Motor.C.forward(); LCD.drawString("Press ESC to quit", 0, 0); while (true) { if (Button.ESCAPE.isPressed()) { System.exit(0); } if (touchl.ispressed() touchr.ispressed() (sonar.getdistance() < 40)) { Motor.A.stop(); Motor.C.stop(); sleep(1000); Motor.A.backward(); Motor.C.backward(); sleep(1000); Motor.A.forward(); Motor.C.backward(); sleep(1000); Motor.A.stop(); Motor.C.stop(); sleep(1000); Motor.A.forward(); Motor.C.forward(); } } }

LeJOS mix Java SE a ME omezení nejsou classloadery malá velikost aplikací po kompilaci se vytvoří binární obraz aplikace nahraje se do kostky nxjlink -v ClassWithMain -o App.nxj nxjupload App.nxj

LeJosRT http://sourceforge.net/projects/lejosrt/ real-time LeJOS fork z LeJOS LeJOS plus RTSJ není kompletní implementace RTSJ už nevyvíjen

JAVA Android

Přehled kompletní platforma pro mobilní zařízení založená na Linuxu původně vyvíjen firmou Android, Inc. 2005 koupeno Googlem 2007 Open Handset Alliance Google, výrobci HW, výrobci SW,... http://developer.android.com/ dokumentace tutoriály nástroje SDK základní nástroje Android Studio IDE, založeno na IntelliJ IDEA...

Java vs. Android...je to Java nebo ne...? ano i ne záleží na úhlu pohledu programy se (primárně) píší v Javě pak se přeloží do byte-kódu (.class) ten se přeloží do Dalvik byte-kódu (.dex) jiný než Java byte-kód ten se vykonává na Dalvik Virtual Machine <= Android 4.4 jiná než Java Virtual Machine ART Virtual Machine >= Android 5 jiná než Java Virtual Machine

Java vs. Android jaro 2016 změna od Android N Jack and Jill tool chain přímá kompilace z Java do DEX DEPRECATED (jaro 2017) zdroj obrázků: https://source.android.com/source/jack.html

Java vs. Android z Javy se používá jazyk se stejnou syntaxí a sémantikou část API ze standardní knihovny

Struktura platformy zdroj: http://developer.android.com/guide/basics/what-is-android.html

Odbočka: nativní aplikace programy lze psát i v C/C++ není to primární způsob nutno stáhnout oddělené NDK SDK podporuje jen programy v Javě podpora ARM, MIPS a x86 procesorů

Kotlin & Android Kotlin staticky typovaný jazyk běžící na Java virtual machine vyvíjený JetBrains druhý oficiální jazyk pro vývoj pro Android od května 2017

Problém roztříštěnost softwarová i hardwarová softwarová mnoho používaných verzí systému nová API deprecated API různá doporučení, jak vyvíjet aplikace hardwarová stovky různých zařízení s Androidem s různými vlastnostmi velikost displeje, hustota displeje, (ne)přítomnost senzorů, (ne)přítomnost HW tlačítek,...

Různé verze Androidu data k 16. 4. 2018 zdroj: http://developer.android.com/about/dashboards/index.html

Různé verze Androidu (-1 rok) data k 2. 5. 2017 zdroj: http://developer.android.com/about/dashboards/index.html

Různé verze Androidu (-2 rok) data k 2. 5. 2016 zdroj: http://developer.android.com/about/dashboards/index.html

Různé verze Androidu minimum SDK version vlastnost aplikace (definovaná v manifestu) minimální API level požadovaný, aby aplikace běžela na nižší nepůjde nainstalovat vždy by se měla specifikovat implicitní hodnota = 1 target SDK version API level vůči kterému byla aplikace vyvíjena systém nebude aplikovat žádné změny chování pro zachování kompatibility implicitní hodnota = minsdkversion maximum SDK version neměla by se specifikovat nové verze Androidu by měly být vždy zpětně kompatibilní

Různá velikost/rozlišení displeje density-independent pixel dp 1dp = 160px/dpi obrázky v různých variantách podle velikosti/hustoty bude zmíněno později 9-patch PNG roztažitelné obrázky přípona.9.png PNG obrázek ve kterém okraje mají speciální význam levý a horní okraj kde se obrázek může roztahovat pravý a dolní okraj okraj obsahu (např. vnitřek tlačítka) výroba draw9patch program v SDK

9-patch PNG zdroj obrázků: http://developer.android.com/training/multiscreen/screensizes.html

Bezpečnost aplikace běží ve sandboxu implicitně aplikace skoro nic nesmí oprávnění (permissions) specifikována v manifestu při instalaci aplikace systém oznámí uživateli všechna požadovaná oprávnění uživatel musí potvrdit instalaci příklady oprávnění lokace (GPS) bluetooth telefonování SMS/MMS přístup k síti...

Struktura aplikace Activities komponenty UI vstupní bodu do aplikace Views elementy uživatelského rozhraní Intents asynchronní zprávy Services služby bez UI běžící dlouhodobě na pozadí Content providers zpřístupnění dat jiným aplikacím Broadcast Intent Receivers poslouchání na broadcasty (např. oznámení o nízkém stavu baterie (HomeScreen) Widgets interaktivní komponenty na ploše

Vytvoření projektu z IDE New project... z příkazové řádky android create project --target <target-id> --name MyFirstApp --path <path-to-your-project>/myfirstapp --activity MainActivity --package com.example.myfirstapp

Vytvoření projektu parametry projektu Application Name lidsky čitelné jméno Package Name kořenový balíček, slouží i jako identifikátor aplikace nutno dodržovat konvenci pro pojmenování Target (min SDK version) není to přímo API level příkaz android list seznam všech dostupných targetů

Struktura projektu AndroidManifest.xml res/ src/

Struktura projektu AndroidManifest.xml popis aplikace komponenty požadavky <?xml version="1.0" encoding="utf-8"?> <manifest... > <uses-sdk android:minsdkversion="8" android:targetsdkversion="17" /> <application android:icon="@drawable/app_icon.png"... > <activity android:name="com.example.project.exampleactivity" android:label="@string/example_label"... > </activity>... </application> </manifest>

Struktura projektu res/ zdroje (resources) typ podadresáře v adresáři res drawable obrázky... values řetězce layouts obrazovky třída R generovaná třída obsahuje identifikátory zdrojů jako statické atributy používají se v kódu

Struktura projektu zdroje mohou mít varianty určují se podle přípon drawable-hdpi, drawable-ldpi, drawable-mdpi obrázky pro vysoké, nízké, střední rozlišení displaye další přípony land, port orientace displaye cs, en, fr, jazyk zařízení small, normal, large velikost displaye... přípony lze kombinovat př: res/values-de/ res/values-cs/ res/drawable-cs/ res/drawable-en-ruk/

Spuštění aplikace v emulátoru android avd správa emulátorů na skutečném zařízení připojeném přes USB přeložení gradlew assembledebug nainstalování (do emulatoru/na zařízení) adb install app/build/outputs/ MyFirstApp-debug.apk

Aktivity potomek android.app.activity okno aplikace může sloužit i jako vstupní bod do aplikace launcher vzhled se typicky popisuje jako xml soubor v res/layout

Hello World (1) import android.app.activity; import android.os.bundle; import android.widget.textview; public class HelloAndroid extends Activity { @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); TextView tv = new TextView(this); tv.settext("hello, Android"); setcontentview(tv); } }

Hello World (2) import android.app.activity; import android.os.bundle; import android.widget.textview; public class HelloAndroid extends Activity { @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); } }

Hello World (2) res/layout/main.xml <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/ apk/res/android" android:id="@+id/textview" jednoznačné ID android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="@string/hello"/> reference res/values/strings.xml <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">hello, Android! I am a string resource!</string> <string name="app_name">hello, Android</string> </resources>

Životní cyklus aktivity zdroj: http://developer.android.com/guide/topics/fundamentals/activities.html

UI podobně jako ve Swingu hierarchie objektů potomci View a ViewGroup zdroj: http://developer.android.com/guide/topics/ui/overview.html

ViewGroup ~ Layout potomci ViewGroup LinearLayout skládá prvky do řady android:orientation="vertical" android:orientation="horizontal" RelativeLayout určování polohy relativně vůči dalším prvkům příklad na dalším slidu TableLayout GridLayout TabLayout ListView

RelativeLayout příklad <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/label" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="type here:"/> <EditText android:id="@+id/entry" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@android:drawable/editbox_background" android:layout_below="@id/label"/> <Button android:id="@+id/ok" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/entry" android:layout_alignparentright="true" android:layout_marginleft="10dip" android:text="ok" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toleftof="@id/ok" android:layout_aligntop="@id/ok" android:text="cancel" /> </RelativeLayout>

Fragments od Android 3.0 existuje support library, která přidává podporu i pro starší verze (od API level 4) pozor na balíček android.app.fragment android.support.v4.app.fragment znovupoužitelná část uživatelského rozhraní ~ vnořená aktivita s vlastním layoutem a životním cyklem aktivita může zobrazovat několik fragmentů snadná tvorba UI pro různé typy displayů telefon tablet

Používání fragmentů zdroj: http://developer.android.com/training/basics/fragments/fragment-ui.html

Používání fragmentů fragment public class ArticleFragment extends Fragment { @Override public View oncreateview(layoutinflater inflater, ViewGroup container, Bundle savedinstancestate) { return inflater.inflate(r.layout.article_view, container, false); } } res/layout-large/news_articles.xml: <LinearLayout xmlns:android="..." android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <fragment android:name="headlinesfragment" android:id="@+id/headlines_fragment" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" /> <fragment android:name="articlefragment"... />

Používání fragmentů aktivita public class MainActivity extends FragmentActivity { @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.news_articles); } } pokud je min API level 11, lze použít normální Activity

Používání fragmentů předchozí příklad pevné UI s dvěma fragmenty vhodné např. pro tablet viz large přípona u layoutu pro střídání fragmentů (např. na telefonu) nutno manipulovat fragmenty z kódu res/layout/news_articles.xml <FrameLayout xmlns:android="..." android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" /> prázdný layout obsah přidáván z kódu bez large přípony, tj. pro ostatní velikosti displejů

Používání fragmentů public class MainActivity extends FragmentActivity { @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.news_articles); if (findviewbyid(r.id.fragment_container)!= null) { if (savedinstancestate!= null) { return; } HeadlinesFragment firstfragment = new HeadlinesFragment(); firstfragment.setarguments(getintent().getextras()); getsupportfragmentmanager().begintransaction().add(r.id.fragment_container, firstfragment).commit(); } } }

Používání fragmentů výměna zobrazeného fragmentu ArticleFragment newfragment = new ArticleFragment(); FragmentTransaction transaction = getsupportfragmentmanager().begintransaction(); transaction.replace(r.id.fragment_container, newfragment); transaction.addtobackstack(null); transaction.commit();

Intents komponenty aplikace (aktivity, služby a broadcast receivery) jsou aktivovány pomocí Intentů zprávy Intent pasivní objekt potomek android.content.intent položky component name action řetězec mnoho předdefinovaných lze vytvořit vlastní data URI dat, se kterými se má pracovat category další informace o typu komponenty, která má na intent reagovat extras flags

Intents explicitní se jménem cílové komponenty typicky používané uvnitř aplikace implicitní bez jména komponenty typicky komunikace mezi aplikacemi intent filtry které intenty komponenta může obsloužit zapisuje se v manifestu <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter>

Intents lze nastavit oprávnění reagování na intent zapsáno v manifestu schvalováno v okamžiku instalace i systémové aplikace reagují na intenty > lze si napsat vlastní systémové aplikace Mailer, SMS app, Homepage,...

Intents příklad private static final int ACTIVITY_PICK_CONTACT = 42; private void pickcontact() { Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startactivityforresult(intent, ACTIVITY_PICK_CONTACT); } @Override protected void onactivityresult(int requestcode, int resultcode, Intent data) { super.onactivityresult(requestcode, resultcode, data); switch (requestcode) { case (ACTIVITY_PICK_CONTACT) : if (resultcode == Activity.RESULT_OK) { Uri pickedcontact = data.getdata(); return; } break; } }

Task zásobník spuštěných aktivit aktivita reaguje na intent = vytvoří se nová instance a vloží se na zásobník uživatel komunikuje s aktivitou na vrcholu může existovat více tasků paralelně task ~ běžící aplikace

Services služby běžící na pozadí potomci od android.app.service nestartují automaticky svoje vlákno! IntentService potomek od Service určeno pro služby reagující na intenty již obsahuje správu vláken stačí předefinovat void onhandleintent(intent intent)

Vlákna aktivity aplikace se spouští v jednom vlákně události se také obsluhují v tomto vlákně main thread / UI thread obdobně jako Swing UI není thread-safe manipulace s UI provádět v main vláknu neblokovat main vlákno pomocné metody Activity.runOnUiThread(Runnable) View.post(Runnable) View.postDelayed(Runnable, long) AsyncTask obdoba SwingWorkeru

Dialogy public class ADialogFragment extends DialogFragment { @Override public Dialog oncreatedialog(bundle savedinstancestate) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setmessage("message").setpositivebutton("ok", new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int id) {... } }).setnegativebutton("cancel", new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int id) {... } }); return builder.create(); } }

Dialogy zobrazení dialogu ADialogFragment adialog = new ContactDialogFragment(); adialog.show(getfragmentmanager(), "dialog");

Dialogy starý způsob @Override voláno pouze jednou protected Dialog oncreatedialog(int id) { switch (id) { case DIALOG_SHOW_CONTACT: { return new AlertDialog.Builder(this).setTitle("XXX"). setmessage("message").setcancelable(true). setpositivebutton("ok", null).create(); } } uživatelská return null; } konstanta voláno před @Override každým zobrazením protected void onpreparedialog(int id, Dialog dialog) { switch (id) { case DIALOG_SHOW_CONTACT: { if (pickedcontact!= null) { ((AlertDialog) dialog).setmessage("yyy")); } }}}

Dialogy starý způsob showdialog(dialog_show_contact); zobrazení dialogu

Java, letní semestr Verze prezentace 2018 AJ11.cz.2018.01 Tato prezentace podléhá licenci Creative Commons Uveďte autora-neužívejte komerčně 4.0 Mezinárodní License. 71