android app programmingnowak/teaching/android/lecture02.pdf · 2018-11-06 · reactive programming...

36
Android App Programming Unit 2: Databases, Runtime, UX Programming Thomas Nowak Université Paris-Sud

Upload: others

Post on 27-Jun-2020

19 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Android App Programming

Unit 2: Databases, Runtime, UX Programming

Thomas NowakUniversité Paris-Sud

Page 2: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Last Time

Page 3: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Activities

• Single block of user interaction

• In the simplest case, one screen

• Can be a window or part of the screen

• To display something, set its content:

• setContentView(View)

Page 4: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Intents

• Mechanism to launch activities from other activities

• To change activity: need to create object of type Intent, then call the method startActivity with that object

• ex :Intent i = new Intent(this, OtherActivity.class); startActivity(i);

Page 5: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Bundles

• Mechanism to pass data to activities: Bundles

• Can put data in and retrieve it

• ex:bundle.putFloat(“pi”, 3.14); bundle.getFloat(“pi”);

Page 6: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Web services

• web service = set of responses from a web server that aren’t HTML

• return formats: typically JSON or XML

• query formats: often HTTP GET request w/ query strings

• ex: https://www.google.com/search?q=hi

• find web APIs: www.programmableweb.com

Page 7: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Databases

Page 8: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Saving State• several possibilities:

• passing bundles (ugh)

• write into a file (uuugh)

• databases

• preferencesSharedPreferences prefs = getPreferences(MODE_PRIVATE)

Page 9: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Databases• SQL databases:

• relational data model

• proven, robust, optimized

• NoSQL databases:

• different data model, e.g., objects, graphs

• less data translation necessary

Page 10: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Databases

• Physical location of data varies:

• locally (on the phone)

• remote (on one or more servers on the internet)

• e.g., Firebase

Page 11: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

SQLite

• DBMS integrated into Android: SQLite

• packaged into the app

• runs in the same process

• no connection setup necessary

• use the class SQLiteDatabase included in Android

Page 12: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

SQLite in Android• get instance of SQLiteDatabase via openOrCreateDatabase

• call db.rawQuery with SQL statement for results

• loop over result set with a Cursor

• for SQL statements without result, call db.execSQL

• there are specialized methods for some operations, e.g., db.insert

Page 13: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Android Runtime

Page 14: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Runtime• runtime = execution environment of programs

• implements the computational model of the programming language

• ex: C calling conventions

• call stack, parameter/return value passing, caller/callee saved registers

• ex: Python interpreter

• ex: Java Virtual Machine

Page 15: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Non-virtual Machines

ALU

R1 R2

R1

add R1, R2

Page 16: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

else if(strncmp(op, "add", OP_LEN) == 0) { int *op1 = find_reg(arg1); int *op2 = find_reg(arg2); int *res = op1; *res = *op1 + *op2; program_counter++; } else if(strncmp(op, "sub", OP_LEN) == 0) { int *op1 = find_reg(arg1);

Virtual Machines

ALU

R1 R2

R1

add R1, R2add R1, R2

Page 17: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Virtual Machineselse if(strncmp(op, "add", OP_LEN) == 0) { int *op1 = find_reg(arg1); int *op2 = find_reg(arg2); int *res = op1; *res = *op1 + *op2; program_counter++; } else if(strncmp(op, "sub", OP_LEN) == 0) { int *op1 = find_reg(arg1);

Page 18: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Dalvik and ART

Page 19: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

JIT in ART

Page 20: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Stack vs Heap• variables on the stack: implicitly destroyed after method

return (pop of stack frame)

• variables/constantes on the heap: destruction isn’t implicit; no temporal or logical ordering between objects on the heap

• error source in C++: managing the heap, in particular failure to destroy unused objects (memory leak)

• alternative of manually managing the heap: automatic garbage collection by the runtime

Page 21: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Garbage Collection• garbage collection = automatic identification and of

unused objects

• basic mechanism: identification of unused object based on active references

• choice of moment of collection

• goal: don’t block execution of the program

• additional challenge: avoid fragmentation of memory

Page 22: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Reference Counting

• idea: count the number of references to every object

• if count = 0, then destroy the object

• destroying one object can (transitively) cause destruction of a large number of other objects; problematic if immediate destruction

• problem with cyclic references

Page 23: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Mark-and-Sweep

• mark: calculate successors in the directed graph of objects and their references

• sweep: destroy all non-marked objects

• moment of collection:

• stop-the-world

• concurrent

Page 24: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Android Runtime

• originally Dalvik virtual machine

• now ART w/ AOT and JIT compilation of .dex files to native code

• runtime includes garbage collector (even outside of VM)

Page 25: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

UX Programming

Page 26: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

UX Design

Page 27: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Material Design

Page 28: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Constraint Layout

Page 29: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Fragments

Page 30: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Hamburger Menus

Page 31: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Notifications and Dialogs

Page 32: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

MVC

Page 33: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

MVP

Page 34: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

MVVM

Page 35: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Reactive Programming

• reactive programming = asynchronous programming = callback methods = observer pattern

• manage streams of data

• well-adapted paradigm for asynchronous (UX) programs

• Android library: RxAndroid

Page 36: Android App Programmingnowak/teaching/android/Lecture02.pdf · 2018-11-06 · Reactive Programming • reactive programming = asynchronous programming = callback methods = observer

Questions