Újdonságok a Google műhelyéből. Péter Ekler

Hasonló dokumentumok
Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

ANDROID ALKALMAZÁSFEJLESZTÉS

Android Pie újdonságai

Broadcast Service Widget

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

ANDROID ALKALMAZÁSFEJLESZTÉS

Alap számológép alkalmazás

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

Deep Learning a gyakorlatban Python és LUA alapon Felhasználói viselkedés modellezés

OOP: Java 8.Gy: Abstract osztályok, interfészek

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

ANDROID ALKALMAZÁSFEJLESZTÉS

Enterprise JavaBeans 1.4 platform (EJB 2.0)

OOP #14 (referencia-elv)

Android Wear programozás. Nyitrai István

ANDROID ALKALMAZÁSFEJLESZTÉS

Programozási nyelvek Java

Programozási nyelvek Java

Java és web programozás

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

Adatbázisok webalkalmazásokban

Adattárolás Szenzorok

Mobil Informatikai Rendszerek

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

DCOM Áttekintés. Miskolci Egyetem Általános Informatikai Tanszék. Ficsor Lajos DCOM /1

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

Biztonság java web alkalmazásokban

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

ANDROID ALKALMAZÁSFEJLESZTÉS

Osztályok. 4. gyakorlat

libgdx alapok, első alkalmazás

Access adatbázis elérése OLE DB-n keresztül

MVC. Model View Controller

Pénzügyi algoritmusok

ANDROID ALKALMAZÁSFEJLESZTÉS

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése


Abstract osztályok és interface-ek. 7-dik gyakorlat

I. 288.: Utcai WiFi térkép

Adatbázis-kezelés ODBC driverrel

Bevezető. Servlet alapgondolatok

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Programozás I. Első ZH segédlet

Excel ODBC-ADO API. Tevékenységpontok: - DBMS telepítés. - ODBC driver telepítése. - DSN létrehozatala. -Excel-ben ADO bevonása

Hova tovább Android? OpenJDK és további várható újdonságok.

Programozás II gyakorlat. 6. Polimorfizmus

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

Google Maps használata OSM, mint alternatív térkép

OOP: Java 8.Gy: Gyakorlás

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Több app. Egy kódbázis

BME MOGI Gépészeti informatika 8.

Mobil Informatikai Rendszerek

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Symfony kurzus 2014/2015 I. félév. Security: authentication, authorization, user provider, role-ok, access control, FOS user bundle

JNDI - alapok. Java Naming and Directory Interface

ANDROID ALKALMAZÁSFEJLESZTÉS

3. Egyszerű komponensek

Segédanyag: Java alkalmazások gyakorlat

UI megismerése, különböző felbontások támogatása, használati jogok kérése

Collections. Összetett adatstruktúrák

Java és web programozás

Hálózatbiztonság Androidon. Tamas Balogh Tech AutSoft

Programozás C++ -ban 2007/4

Szoftverfejlesztés a Google Android OS-re (Android 3.0, API level 11)

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Objektumorientált programozás C# nyelven

Adatbázis rendszerek I

Adatbányászat és Perszonalizáció architektúra

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Concurrency in Swing

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

ANDROID ALKALMAZÁSFEJLESZTÉS

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

JavaScript bűvésztrükkök, avagy PDF olvasó és böngésző hackelés

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

A SZOFTVERTECHNOLÓGIA ALAPJAI

Grafikus felhasználói felületek. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr.

Komponensek együttműködése web-alkalmazás környezetben. Jónás Richárd Debreceni Egyetem T-Soft Mérnökiroda KFT

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET Core) Cserép Máté

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

Bánsághi Anna

Metamodellezés. Simon Balázs BME IIT, 2011.

Perzisztencia. ANTAL Margit. Sapientia - EMTE. ANTAL Margit Java technológiák 11. előadás Perzisztencia

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

JavaServer Pages (JSP) (folytatás)

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Webes alkalmazások fejlesztése 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Programozás II gyakorlat. 7. Példák a polimorfizmus alkalmazásaira

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Átírás:

Újdonságok a Google műhelyéből Péter Ekler peter.ekler@aut.bme.hu

Android O újdonságok?

Alkalmazás viselkedés változások 1/2 Korlátozott háttérben futás > Alacsonyabb prioritás a háttér szolgáltatásoknak Korlátozott helymeghatározás a háttérben > Ritkább pozíció frissítés > Állítólag csak COARSE_LOCATION Shortcut és Widget elhelyzeés egyszerűbben > requestpinshortcut() hívás URL-ek vége automatikusan kiegészül / -el Security > SSLv3 már nem támogatott > WebView külön process-ként fut, illetve EnableSafeBrowsing >

Alkalmazás viselkedés változások 2/2 ANDROID_ID: > Alkalmazásonként egyedi és nem felhasználónként > Nem változik package uninstall/install-kor > Nem változik, ha a package sign key változna fordításkor Kontakt-ok Content Provider-en keresztüli elérésekor a kontakt használati mutatói (TIMES_CONTACTED, TIMES_USED, stb.) nem pontos számot adnak vissza, hanem csak nagyságrendit A kattintható View-k alapértemezetten focusable-k Permission kezelés permission csoportonként már nem automatikus További részletek: > https://developer.android.com/preview/behavior-changes.html

API újdonságok 1/4 Notification Badges Notification Channels Autofill keretrendszer > Gépelési hibák minimalizálása > Autofill service > requestautofill(), cancel() <TextView Megújult Font kezelés android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontfamily="@font/bariol"/> > Letölthető Font-ok, Font service > Fontok erőforrások > res/font

API újdonságok 2/4 TextView automatikus méretezés <TextView android:id="@+id/tvautosize" android:layout_width="wrap_content" android:layout_height="wrap_content" android:autosizetexttype="uniform" android:autosizemintextsize="12sp" android:autosizemaxtextsize="100sp" android:autosizestepgranularity="2sp" android:text="hwsf free! konferencia" /> Picture in Picture > enterpictureinpicturemode( ); Mi az újdonság? TextView tvusername = findviewbyid(r.id.tvusername);

API újdonságok 3/4 Saját kulcs érték tárolás public class MySpecialDataStore implements PreferenceDataStore { @Override public void putstring(string key, @Nullable String value) { // TBD @Override @Nullable public void getstring(string key, @Nullable String defvalue) { // TBD Adaptív ikonok

API újdonságok 4/4 Pointer capture > view.requestpointercapture(); VolumeShaper > Automatikus hang tranzíciók MediaPlayer újdonságok > Seek módok > Fejlett DRM támogatás Wi-Fi Aware API SubscribeConfig config = new SubscribeConfig.Builder().setServiceName(AWARE_FILE_SHARE_SERVICE_NAME).build(); mawaresession.subscribe(config, new DiscoverySessionCallback() { );

Android O API diff https://developer.android.com/sdk/api_diff/26/c hanges/changes-summary.html Néhány érdekesség: > java.nio.file.files > android.service.autfill és android.view.autofill csomagok > android.icu.text, ScientificNumberFormatter > android.app.admin.dnsevent > android.app.keyguardmanager

Alkalmazás architektúra

Miért kell beszélni az architektúráról? Mi kerüljön az Activity/Fragment osztályba? Hol tároljuk az adatokat? Hogyan kezeljük a konfiguráció változást (pl. képernyő elforgatás)? Hogyan érjük el, hogy az adatok változásakor frissüljön a UI? Milyen ORM-et használjunk? Hogyan válasszuk szét az adatforrást az adatoktól?

Architecture Components elemek Lifecycle / LifecycleObserver > Lifecycle-függő komponensek, objektumok hozhatók létre LiveData > Adat kezelő, megfigyelhetővé teszi az adatot ViewModel > UI-on megjelenő adatok egyszerű kezelése, mely független a konfiguráció változástól Room Persistence Library > Google saját ORM megoldása, a teljes SQLite képességeket kihasználja

LifeCycleObserver public class AcceleroSensorListener implements LifecycleObserver, SensorEventListener { private Context context; private SensorManager sensormanager; private Sensor accelerosensor; public AcceleroSensorListener(Context context) { this.context = context; sensormanager = (SensorManager) context.getsystemservice(sensor_service); accelerosensor = sensormanager.getdefaultsensor(sensor.type_accelerometer); @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) public void onresume() { sensormanager.registerlistener(this, accelerosensor, SensorManager.SENSOR_DELAY_NORMAL); @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) public void onpause() { sensormanager.unregisterlistener(this); @Override public void onsensorchanged(sensorevent sensorevent) { Toast.makeText(context, "Sensor: "+sensorevent.values[0], Toast.LENGTH_SHORT).show(); @Override public void onaccuracychanged(sensor sensor, int i) {

LifeCyclerObserver használat Activity-ben, Fragment-ben, vagy egyedi nézeteken: getlifecycle().addobserver(new AcceleroSensorListener(this));

LiveData public class AcceleroSensorLiveData extends LiveData<SensorEvent> implements SensorEventListener { private Context context; private SensorManager sensormanager; private Sensor accelerosensor; public AcceleroSensorLiveData(Context context) { this.context = context; sensormanager = (SensorManager) context.getsystemservice(sensor_service); accelerosensor = sensormanager.getdefaultsensor(sensor.type_accelerometer); @Override protected void onactive() { sensormanager.registerlistener(this, accelerosensor, SensorManager.SENSOR_DELAY_NORMAL); @Override protected void oninactive() { sensormanager.unregisterlistener(this); @Override public void onsensorchanged(sensorevent sensorevent) { setvalue(sensorevent); @Override public void onaccuracychanged(sensor sensor, int i) {

LiveData használat LiveData gyakran Singleton Activity-ben, Fragment-ben, vagy egyedi nézeteken: LiveData<SensorEvent> accelerosensorlivedata = new AcceleroSensorLiveData(this); accelerosensorlivedata.observe(this, new Observer<SensorEvent>() { @Override public void onchanged(@nullable SensorEvent sensorevent) { tvstatus.settext("x: "+sensorevent.values[0]+", Y: "+ sensorevent.values[1]+", Z: "+sensorevent.values[2]); );

ViewModel és használat public class AccceleroSensorViewModel extends ViewModel{ private AcceleroSensorLiveData accelerosensorlivedata; public LiveData<SensorEvent> getaccelerolivedata(context context) { if (accelerosensorlivedata == null) { accelerosensorlivedata = new AcceleroSensorLiveData(context); return accelerosensorlivedata; Activity-ben, Fragment-ben, vagy egyedi nézeteken: AccceleroSensorViewModel acceleroviewmodel = ViewModelProviders.of(this).get( AccceleroSensorViewModel.class); acceleroviewmodel.getaccelerolivedata(this).observe(this, new Observer<SensorEvent>() { @Override public void onchanged(@nullable SensorEvent sensorevent) { tvstatus.settext("x: "+sensorevent.values[0]+", Y: "+ sensorevent.values[1]+", Z: "+sensorevent.values[2]); );

Room példa - Entity @Entity public class User { @PrimaryKey private int uid; @ColumnInfo(name = "first_name") private String firstname; @ColumnInfo(name = "last_name") private String lastname; // Getter-ek és setter-eks kötelezők

Room példa - DAO @Dao public interface UserDao { @Query("SELECT * FROM user") List<User> getall(); @Query("SELECT * FROM user WHERE uid IN (:userids)") List<User> loadallbyids(int[] userids); @Query("SELECT * FROM user WHERE first_name LIKE :first AND " + "last_name LIKE :last LIMIT 1") User findbyname(string first, String last); @Insert void insertall(user... users); @Delete void delete(user user);

Room használat Database: @Database(entities = {User.class, version = 1) public abstract class AppDatabase extends RoomDatabase { public abstract UserDao userdao(); DB példány: AppDatabase db = Room.databaseBuilder( getapplicationcontext(), AppDatabase.class, "database-name").build();

Javasolt architektúra

Javasolt architektúra Az Activity-k, Fragmentek, egyedi nézetek ViewModel-eket használnak A ViewModel-ek LiveData-kon keresztül teszik megfigyelhetővé az adatokat A ViewModel-ek Repository-kat használnak az adatforrások elrejtéséhez Perzisztencia használata offline működés támogatására

Tanácsok A komponensek nem adatforrások Számos best practice létezik már, pl. MVP, de nem Android specifikusak Ha van egy bevált architektúránk, nem kell változtatni > De érdemes megnézni, hol segíthetnek/egyszerűsíthetnek az architektúra komponensek Tervezéskor a tesztelhetőség mindig fontos szempont legyen

Kotlin

Kotlin érdekességek Extension függvények fun String.thxEmailMessage():String { return this.plus(", köszönjük, hogy részt vett a konferencián.") "Zoltán".greet() Null safety val text:string = "demo" text = null text?.length Default és elnevezett argumentumok fun enablefeature(id: Int, desc: String = "Open") { enablefeature(15, "Hey") enablefeature(desc = "Name", id = 45) enablefeature(45)

Az Android jövője Pletykák: Fuchsia A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Még van ~9 évünk J

Köszönöm a figyelmet! https://github.com/peekler/androiddemos peter.ekler@aut.bme.hu