JAVA Android Java, letní semestr

Podobné dokumenty
JAVA. Real-Time Java

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

ANDROID. Ing. Ladislav Pešička

Android 100% Java telefon. Petr Musil

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

Programování v Javě I. Leden 2008

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

4. UŽIVATELSKÉ ROZHRANÍ

Android za hranicemi Hello World

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

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

Úvod do programovacích jazyků (Java)

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

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

Windows a real-time. Windows Embedded

KMI / TMA Tvorba mobilních aplikací

Úvod do programování v jazyce Java

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

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

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

KMI / TMA Tvorba mobilních aplikací

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

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

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

Teoretické minimum z PJV

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

Algoritmizace a programování

Jazyk C# (seminář 6)

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

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

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

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

3. ŽIVOTNÍ CYKLUS ACTIVITY

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

První kapitola úvod do problematiky

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

Výčtový typ strana 67

Algoritmizace a programování

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

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

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

Zápis programu v jazyce C#

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

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

Klient Stagu pro Android

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

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

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

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

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

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

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

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.

Programovací jazyk Java

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

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

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

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

1. Programování proti rozhraní

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

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

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

Programátorská příručka

Iterator & for cyklus

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

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

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

JAVA Unit testing Java, zimní semestr

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java)

Generické programování

MATURITNÍ PRÁCE dokumentace

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

Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu

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

UJO Framework. revoluční architektura beans. verze

1. Téma 12 - Textové soubory a výjimky

Seminář Java II p.1/43

Úvod do programování v jazyce Java

KTE / ZPE Informační technologie

11. Přehled prog. jazyků

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

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

Datové struktury. alg12 1

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

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

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

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

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

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

Objektově orientované programování

Uklízení odpadků a analýza úniku

Principy objektově orientovaného programování

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

Transkript:

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 plugin pro Eclipse existují 3rd-party pluginy pro další IDE př. pro NetBeans http://kenai.com/projects/nbandroid...

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 jiná než Java Virtual Machine

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ě aktuálně podpora ARM procesorů

Vytvoření projektu z IDE New project... z příkazové řádky android create project --package com.example.helloandroid --activity HelloAndroid --target 2 path <path-to-your-project>/helloandroid 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) minimální požadovaný API level

Struktura aplikace Activities komponenty UI vstupní bodu do aplikace 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

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

Struktura projektu zdroje (resources) 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 adresáře zdrojů 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/

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" 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>

Layout obdobně jako ve Swingu 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>

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

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é komponent 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 @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 showdialog(dialog_show_contact); zobrazení dialogu

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 syté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 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 Immortal Memory Heap Memory

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

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 Java 6 mix Java SE a ME omezení nejsou classloadery po kompilaci se vytvoří binární obraz aplikace nahraje se do kostky nxjlink -v ClassWithMain -o App.nxj nxjupload App.nxj

LeJosRT http://lejosrt.org/ real-time LeJOS fork z LeJOS LeJOS plus RTSJ není kompletní implementace RTSJ