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 100% Java telefon. Petr Musil

ANDROID. Ing. Ladislav Pešička

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í

Programování v Javě I. Leden 2008

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

Windows a real-time. Windows Embedded

Android za hranicemi Hello World

MATURITNÍ PRÁCE dokumentace

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

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

Úvod do programovacích jazyků (Java)

Úvod do programování v jazyce Java

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

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

Algoritmizace a programování

Iterator & for cyklus

JAVA Unit testing Java, zimní semestr

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

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

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

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

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

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.

3. ŽIVOTNÍ CYKLUS ACTIVITY

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

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

Klient Stagu pro Android

Algoritmizace a programování

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

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

JAVA Moduly Java, letní semestr 2018

První kapitola úvod do problematiky

Teoretické minimum z PJV

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

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

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

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

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

GUI. Systémová integrace pro desktopové aplikace

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í.

Programátorská příručka

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

Výčtový typ strana 67

Jazyk C# (seminář 6)

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

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

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

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

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

Diplomová práce. Rozvrh hodin pro

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

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

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

Programovací jazyk Java

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

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

1. Programování proti rozhraní

11. Přehled prog. jazyků

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

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

Zápis programu v jazyce C#

Úvod do programovacích jazyků (Java)

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

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

1 Návod na instalaci prostředí LeJOS-NXJ a přehrání firmwaru NXT kostky

UJO Framework. revoluční architektura beans. verze

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

Abstraktní datové typy: zásobník

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

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

Generické programování

ZÁPADOČESKÁ UNIVERZITA V PLZNI FAKULTA EKONOMICKÁ

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

Software602 Form Designer

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

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

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

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

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

Java Výjimky Java, zimní semestr

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 nyní ve verzi 1.0.2 žá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 halda jako normálně immortal paměť vlákno bez přístupu k haldě nemůže být blokováno GC 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

JAVA LeJOS

Přehled http://lejos.sourceforge.net/ 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 pravděpodobně už nevyvíjen

JAVA Android

Přehled kompletní platforma pro mobilní zařízení původně vyvíjen firmou Android, Inc. 2005 koupeno Googlem 2007 Open Handset Alliance založená na Linuxu 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 ADT plugin pro Eclipse... existují 3rd-party pluginy pro další IDE př. pro NetBeans http://www.nbandroid.org/

Java vs. Android...je to Java nebo ne...? ano i ne 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) záleží na úhlu pohledu 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 změna od Android N Jack and Jill tool chain přímá kompilace z Java do DEX 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ů

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 2. 5. 2016 zdroj: http://developer.android.com/about/dashboards/index.html

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

Různé verze Androidu (-2 roky) data k 1. 4. 2014 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 vždy by se měla specifikovat implicitní hodnota = 1 target SDK version na nižší nepůjde nainstalovat 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 Views zpřístupnění dat jiným aplikacím Broadcast Intent Receivers služby bez UI běžící dlouhodobě na pozadí Content providers asynchronní zprávy Services elementy uživatelského rozhraní Intents komponenty UI vstupní bodu do aplikace 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 Package Name lidsky čitelné jméno 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 values řetězce layouts obrázky... 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 další přípony obrázky pro vysoké, nízké, střední rozlišení displaye 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 na skutečném zařízení připojeném přes USB přeložení správa emulátorů 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/and roid" jednoznačné ID android:id="@+id/textview" android:layout_width="fill_parent" android:layout_height="fill_parent" reference android:text="@string/hello"/> 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 RelativeLayout android:orientation="vertical" android:orientation="horizontal" 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 data řetězec mnoho předdefinovaných lze vytvořit vlastní URI dat, se kterými se má pracovat category další informace o typu komponenty, která má na intent reagovat extras flags

Intents explicitní implicitní se jménem cílové komponenty typicky používané uvnitř aplikace 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 pomocné metody manipulace s UI provádět v main vláknu neblokovat main vlákno 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) {... } }); Java, letní semestr 2016 return builder.create(); } }

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

Dialogy starý způsob voláno pouze jednou @Override 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 každým zobrazením @Override 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

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