Haupttitel der Präsentation

Slides:



Advertisements
Ähnliche Präsentationen
Objektorientierte Programmierung
Advertisements

Softwareentwicklung für Android
Kritische Betrachtung
der Universität Oldenburg
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Ausnahmen HS Merseburg (FH) WS 06/07.
Threads Richard Göbel.
Java: Grundlagen der Sprache
Java: Grundlagen der Objektorientierung
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Polymorphie (Vielgestaltigkeit)
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Programmieren mit JAVA
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Command Pattern Karola Schäuble,
Vortrag - Kenny Schlör Applets Einführung in die Appletprogrammierung.
DVG1 - Applets1 Applets. DVG1 - Applets2 Die Klasse Applet n Applets sind Grafikobjekte, die unter Steuerung eines anderen Programms (z.B. eines Browsers,
DVG Einführung in Java1 Einführung in JAVA.
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
JDBC EDV JDBC.
Informatikunterricht mit Java
Objektorientierte Modellierung
News Modul Überblick und Erweiterung
Java ohne Kara. Java ohne Kara Ab jetzt: Java ohne Kara Ziel: Erfahrungen sammeln mit ersten Java Programmen.
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Uwe Habermann Venelina Jordanova Übernahme der Visual FoxPro Geschäftslogik.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Unterprogramme in JAVA
Parameterübergabemechanismen für den Methodenaufruf
Objectives Verstehen was unterDelegate verstanden wird
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Java-Kurs Übung Benutzeroberflächen und Graphik
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Java-Kurs Übung Benutzeroberflächen und Graphik Frames (Fenster)
A Workshop About this chapter General description Units Time Schedule
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003.
Objektorientierte Programmierung (OOP)
Wien Fotos, Audio und Video Multimedia in Android.
Wien Oberflächengestaltung und Gestensteuerung Styles, ActionBar und Gestensteuerung.
Vererbung. Klassen - Vererbung  Eine Klasse kann von einer Basisklasse abgeleitet werden  Die abgeleitete Klasse erbt die Eigenschaften und Methoden.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/06 1 Beispiel class SpreadSheet { int cellA1, cellA2, cellA3; synchronized.
Tutorium Software-Engineering SS14 Florian Manghofer.
Java Programme nur ein bisschen objektorientiert.
C++ FÜR cOMPUTERSPIELENTWICKLER
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
OOP II.
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Java-Kurs - 5. Übung Das Paradigma der Objektorientierung (OO)
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Haupttitel der Präsentation
Haupttitel der Präsentation
Grundkurs Informatik 11-13
«Delegierter» Methoden Schablone Funktionszeiger
Implementieren von Klassen
Polymorphie Überschreiben
 Präsentation transkript:

Haupttitel der Präsentation 15.09.2018 WIFI Bundesland

Hintergrundverarbeitung 1/2 Oft ist es entweder notwendig oder zumindest erwünscht, Tätigkeiten im Hintergrund, also Benutzer-Interaktion durchzuführen Dies kann z.B. die regelmäßige Abfrage eines WebServices sein oder eine Verarbeitung die länger dauert und die App soll nicht „ins Stocken“ geraten Android stellt vor allem zwei Möglichkeiten zur Verfügung, um im Hintergrund Abfragen, Berechnungen, … durchzuführen

Hintergrundverarbeitung 2/2 Services/Dienste Keine Benutzeroberfläche Eigenes Programm, keine Abhängigkeit von App Für lang und ständig laufende Hintergrundaufgaben Für das System (fast) so wichtig wie aktive Apps, werden somit (fast) nie vom System beendet Hintergrund-Tasks Hängen an der App zu der Sie gehören, bei Neustart der App, zB auch durch Neuorientierung des Gerätes, wird Task beendet Eher für einmalige, kurze Aufgaben

Registrieren eines Dienstes Um einen Dienst verwenden zu können, muss er, so wie Aktivitäten, in der Manifest-Datei erwähnt sein <service android:enabled=„true“ android:name=„.MeinDienst“/>

Erstellen und kontrollieren von Diensten Ableiten der Klasse Service auf eine eigene Klasse Überschreiben von (zumindest) onBind() public class MeinDienst extends Service { @Override public IBinder onBind(Intent intent) { return null;} }

Starten von Diensten 1/2 Überschreiben von onStartCommand() der Klasse Service in der eigenen Ableitung @Override public int onStartCommand(Intent intent, int flags, int startId) { startHintergrundAufgabe(intent, startId); return Service.START_STICKY; } Der Rückgabe-Wert START_STICKY – wird neu gestartet, wenn beendet START_NOT_STICKY START_REDELIVER_INTENT – wie STICKY, aber Indent wird wieder mitgegeben.

Starten von Diensten 2/2 Um einen Dienst zu starten wird startService() aufgerufen. Wie bei Aktivitäten gibt es zwei Methoden Dienste zu starten bzw. starten zu lassen Explizit: Die Klasse des Dienstes wird ausdrücklich (explizit) angeführt Somit bestimmt der Klassenname welcher Dienst gestartet wird Intent intent = new Intent(this, MeinDienst.class) Implizit: Ein registrierter Intent-Receiver vorausgesetzt, wird dem System mitgeteilt, was denn passieren soll und dadurch implizit der Dienst ausgewählt Intent intent = new Intent(MeinDienst.HOLE_HINTERGRUND) intent.putExtra(MeinDienst.URL, „orf“); startService(intent)

Stoppen von Diensten Um einen Dienst zu stoppen wird stopService() aufgerufen. Wie beim Start gibt es zwei Methoden Dienste zu starten bzw. starten zu lassen Explizit: Intent intent = new Intent(this, MeinDienst.class) Implizit: Intent intent = new Intent(MeinDienst.HOLE_HINTERGRUND) stopService(intent) Wenn ein Dienst seine Tätigkeit beendet hat, kann er sich auch selber mit stopSelf() beenden

Verbinden von Diensten mit Aktivitäten 1/3 Verbinden von Diensten mit Aktivitäten ermöglicht das Aufrufen von Methoden eines laufenden Dienstes aus der verbundenen Aktivität Um Aktivitäten mit Diensten zu verbinden, wird der schon erwähnte Event-Handler onBind() in Kombination mit einer eigenen Binder-Klasse abgeleitet von Binder eingesetzt. private final IBinder binder = new MeinBinder(); public IBinder onBind(Intent intent) { return binder;} public class MeinBinder extends Binder { MeinDienst getService() { return MeinDienst.this; }

Verbinden von Diensten mit Aktivitäten 2/3 Die Verbindung wird von einer Instanz der Klasse ServiceConnection gespeichert Die Event-Handler onServiceConnected() und onServiceDisconnected() sollten überschrieben werden Danach kann mit bindService() der Dienst verbunden werden (Nicht vergessen das Service zu starten)

Verbinden von Diensten mit Aktivitäten 3/3 private MeinDienstService dienstRef; private ServiceConnection mConnection = new ServiceConnection() { public void onServiceConnected(…, IBinder service) { dienstRef = (…)service.getService(); } public void onServiceDisconnected(…) { dienstRef=null; }}; Intent bindIntent = …; bindService(bindIntent, mConnection, Context.BIND_AUTO_CREATE);

Einsatz von Hintergrund-Tasks Vor allem um „Hängen“ der Applikation zu vermeiden, sollten und können Aufgaben, die mehr als rund 500 Millisekunden dauern im Hintergrund erledigt werden. So es sich bei diesen Aufgaben um Eher kurz dauernd Einmalig durchzuführen Mit Anschluss an die Benutzeroberfläche handelt, bietet sich der Einsatz von AsyncTask an.

Erstellen eines asynchronen Hintergrund-Tasks (AsyncTask) Vererben von Klasse AsyncTask mit den zu verwendenden Typen von Parametern in der Reihenfolge Input, Fortschritt, Output private class MeinTask extends AsyncTask<String, Integer, String> { protected String doInBackground(String… parameter) // im Hintergrund, mit publishProgress(x) wird Fortschritt // kommuniziert protected void onProgressUpdate(Integer… progress) // UI aktualisieren protected void onPostExecute(String result) //Aufgabe erledigt, UI aktualisieren

Starten eines asynchronen Hintergrund-Tasks Instanzieren der abgeleiteten Klasse Aufruf der Methode execute() dieser Instanz String input = „http://wifiwien.at“ MeinTask hintergrund = new MeinTask(); hintergrund.execute(input);

Üben Erstellen Sie eine Aktivität mit zwei Buttons, [Start Dienst] und [Stop Dienst]. Bei Klick auf einen der Buttons wird die jeweilige Aktion ausgeführt. Der Dienst soll jede Sekunde in das Log einen Text schreiben. Erweitern Sie die Aktivität um einen Button, der einen Zähler im Service ausgibt. (Der Zähler soll mit jedem Log Eintrag um 1 erhöht werden) Erstellen Sie einen Hintergrund-Task der in einer Schleife von 1 bis 10 zählt, pro Schritt eine halbe Sekunde wartet und nach jedem Schritt einen Text mit dem aktuellen Wert anzeigt.

Verwenden von Alarm Um ressourcenschonend Dienste einzusetzen (=damit diese nicht ständig laufen) kann man mit Alarmen arbeiten Um einen Alarm einzusetzen, verwendet man den AlarmManager mit Intent, PendingIntent und set() bzw. setRepeating()/setInexactRepeating() AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); int alarmType=AlarmManager.ELAPSE_REALTIME_WAKEUP String ALARM_ACTION =„ALARM_ACTION“ Intent intent=new Intent(ALARM_ACTION) PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intent,0); alarmManager.setInexactRepeating(alarmType, 120, 120, alarmIntent); alarmManager.cancel(alarmIntent);

Wichtige Befehle Im Manifest registrieren onCreate(), onBind(), onStartCommand() aus Service überschreiben startService() stopService(), stopSelf() bindService() doInBackground() onProgressUpdate() onPostExecute() execute() AlarmManager setInexactRepeating()

Üben Erstellen Sie einen Dienst, der alle fünf Minuten einen RSS-Dienst ihrer Wahl abfrägt und wenn es einen oder mehrere neue Einträge gibt, diese in eine lokale Datenbank speichert Erstellen Sie einen Alarm, der jede Stunde die Aktivität „Pause machen“ aufruft. Diese Aktivität zeigt den Text „Jetzt! Pause! Machen!“ an

Zusammenfassung