Programming with Android: Notifications, Threads, Services Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.

Slides:



Advertisements
Similar presentations
Programming with Android: Activities and Intents
Advertisements

Programming with Android: Activities
Services. Application component No user interface Two main uses Performing background processing Supporting remote method execution.
Programming with Android: Notifications, Threads, Services
Programming with Android: Activities and Intents Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.
Programming with Android: Activities and Intents Luca Bedogni Marco Di Felice Dipartimento di Informatica – Scienza e Ingegneria Università di Bologna.
Programming with Android: Widgets and Events Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.
Cosc 5/4730 Android Services. What is a service? From android developer web pages: Most confusion about the Service class actually revolves around what.
Android Projects Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna.
CSS216 MOBILE PROGRAMMING Android, Chapter 9 Book: “Professional Android™ 2 Application Development” by Reto Meier, 2010 by: Andrey Bogdanchikov (
Android Application Model (3)
Programming with Android: Activities
Android 02: Activities David Meredith
All About Android Introduction to Android 1. Creating a New App “These aren’t the droids we’re looking for.” Obi-wan Kenobi 1. Bring up Eclipse. 2. Click.
The Android Activity Lifecycle. Slide 2 Introduction Working with the Android logging system Rotation and multiple layouts Understanding the Android activity.
Lec 06 AsyncTask Local Services IntentService Broadcast Receivers.
Cosc 4755 Android Notifications. There are a couple of ways to notify users with interrupting what they are doing The first is Toast, use the factory.
Notifications & Alarms.  Notifications  Alarms.
Cosc 4730 Android Dialogs and notifications. Notifications There are a couple of ways to notify users without interrupting what they are doing The first.
1 Working with the Android Services Nilanjan Banerjee Mobile Systems Programming University of Arkansas Fayetteville, AR
Cosc 4755 Phone programming: GUI Concepts & Threads.
Mobile Programming Pertemuan 6 Presented by Mulyono Poltek NSC Surabaya.
 Understanding an activity  Starting an activity  Passing information between activities  Understanding intents  Understanding the activity lifecycle.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved Concurrency in Android with.
Software Architecture of Android Yaodong Bi, Ph.D. Department of Computing Sciences University of Scranton.
Mobile Computing Lecture#08 IntentFilters & BroadcastReceivers.
P2P communication Using the GTalk Service API. Introduction Peer-to-Peer communication highly used in mobile devices. Very efficient to when certain factors.
Cosc 5/4730 Introduction: Threads, Android Activities, and MVC.
Networking: Part 2 (Accessing the Internet). The UI Thread When an application is launched, the system creates a “main” UI thread responsible for handling.
Cosc 5/4730 Broadcast Receiver. Broadcast receiver A broadcast receiver (short receiver) – is an Android component which allows you to register for system.
COMP 365 Android Development.  Perform operations in the background  Services do not have a user interface (UI)  Can run without appearing on screen.
DUE Hello World on the Android Platform.
16 Services and Broadcast Receivers CSNB544 Mobile Application Development Thanks to Utexas Austin.
Threads and Services. Background Processes One of the key differences between Android and iPhone is the ability to run things in the background on Android.
ANDROID L. Grewe Components  Java Standard Development Kit (JDK) (download) (latest version)  AndroidStudio.
Working in the Background Radan Ganchev Astea Solutions.
Android 13: Services and Content Providers Kirk Scott 1.
Services A Service is an application component that can perform long-running operations in the background and does not provide a user interface. An application.
Concurrent Programming and Threads Threads Blocking a User Interface.
Notifications. A notification is a message you can display to the user outside of your application's normal UI. When you tell the system to issue a notification,
Themes and Menus: The Sudoku Example Content taken from book: “Hello, Android” by Ed Burnette Third Edition.
Mobile Programming Midterm Review
DKU-MUST Mobile ICT Education Center 10. Activity and Intent.
Recap of Part 1 Terminology Windows FormsAndroidMVP FormActivityView? ControlViewView? ?ServiceModel? Activities Views / ViewGroups Intents Services.
Services Background operating component without a visual interface Running in the background indefinitely Differently from Activity, Service in Android.
Lecture 2: Android Concepts
Technische Universität München Services, IPC and RPC Gökhan Yilmaz, Benedikt Brück.
Lecture 6: Process and Threads Topics: Process, Threads, Worker Thread, Async Task Date: Mar 1, 2016.
Speech Service & client(Activity) 오지영.
CHAPTER 6 Threads, Handlers, and Programmatic Movement.
Services. What is a Service? A Service is not a separate process. A Service is not a thread. A Service itself is actually very simple, providing two main.
Developing Android Services. Objectives Creating a service that runs in background Performing long-running tasks in a separate thread Performing repeated.
Multithreading Chapter 6. Objectives Understand the benefits of multithreading on Android Understand multi-threading fundamentals Know the Thread class.
Concurrency in Android
Broadcast receivers.
CS371m - Mobile Computing Services and Broadcast Receivers
Instructor: Mazhar Hussain
Activities and Intents
Android Mobile Application Development
Lecture 6: Process, Thread, Task
Android Programming Lecture 9
Developing Android Services
Android Programming Lecture 8
CS371m - Mobile Computing Responsiveness.
Android Topics Asynchronous Callsbacks
Android Developer Fundamentals V2 Lesson 5
Threads, Handlers, and AsyncTasks
Service Services.
Lecture 6: Process, Thread, Task
CIS 470 Mobile App Development
Presentation transcript:

Programming with Android: Notifications, Threads, Services Luca Bedogni Marco Di Felice Dipartimento di Scienze dell’Informazione Università di Bologna

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services 2 Outline Services: Remote Services Services: Local Services Thread: Handler and Looper Thread Management in Android Notification Services: Toast Notifications Notification Services: Status Bar Notifications Broadcast Receivers

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: Where are we now … TILL NOW  Android Application structured has a single Activity or as a group of Activities …  Intents to call other activities  Layout and Views to setup the GUI  Events to manage the interactions with the user Activities executed only in foreground …  What about background activities?  What about multi-threading functionalities?  What about external events handling?

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: Where are we now …  Setup of the application GUI  GUI event management  Application Menu and Preferences  Network functionalities (send/receive messages)  Updates in background mode  Notifications in case of message reception in background mode EXAMPLE : A simple application of Instantaneous Messaging (IM)

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: Service Notifications Types Service Notifications: Mechanism to notify information to the end-user on the occurrence of specific events.... Status Bar NotificationsToast Notifications

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: Status Bar Notifications  Used by background services to notify the occurrence of an event that requires a response … without interrupting the operations of the foreground activities!  Display an icon on the Status Bar (top screen)  Display a message in the Notification Window  Fire an event in case the user selects the notification

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: Status Bar Notifications Notification Manager Android system component Responsible for notification management And status bar updates STATUS BAR Notification  Icon for the status bar  Title and message  PendingIntent to be fired when notification is selected  Ticket-text message  Alert-sound  Vibrate setting  Flashing LED setting  Customized layout OPTIONs:

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: Status Bar Notifications  Follow these steps to send a Notification: 1.Get a reference to the Notification Manager NotificationManager nm=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE) 2. Build the Notification message public Notification(int icon, CharSequence tickerText, long when) public void setLatestEvent(Context context, CharSequence contentTitle, CharSequence contentText, PendingIntent intent) 3. Send the notification to the Notification Manager public void notify(int id, Notification notification)

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni // Specificy icon, ticket message and time Notification notification = new Notification(R.drawable.icon, "This is a very basic Notification to catch your attention!", System.currentTimeMillis()); Build the notification object Define what will happen in case the user selects the notification // Build an explicit intent to NotificationActivity Intent intent = new Intent(this, NotificationActivity.class); PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); Android: Status Bar Notifications

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni // Specificy that notification will disappear when handled notification.flags |= Notification.FLAG_AUTO_CANCEL; Add (optional) flags for notification handling Send the notification to the Notification Manager // Set short and long message to be displayed on the notification window // Set the PendingIntent notification.setLatestEventInfo(this, "Notification", "Click to launch NotificationActivity", pIntent); notificationManager.notify(SIMPLE_NOTIFICATION_ID, notification); Android: Status Bar Notifications

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni // Use a default sound notification.defaults |= Notification.DEFAULT_SOUND; Add a sound to the notification Pass an URI to the sound field to set a different sound notification.sound = Uri.parse(file://sdcard/path/ringer.mp3); Use FLAG_INSISTENT to play the sound till notification is handled notification.flags |= Notification.FLAG_INSISTENT; Android: Status Bar Notifications

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni // Use a default LED notification.defaults |= Notification.DEFAULT_LIGHTS; Add flashing lights to the notification Define color and pattern of the flashing lights notification.ledARGB = 0xff00ff00; notification.ledOnMS = 300; notification. ledOffMS = 1000; notification.flags |= Notification.FLAG_SHOW_LIGHTS; Android: Status Bar Notifications

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni // Use a default vibration notification.defaults |= Notification.DEFAULT_VIBRATE; Add vibrations to the notification Define the vibration pattern // Set two vibrations, one starting at time 0 and with duration equal to 100ms long[] vibrate={0,100,200,300}; notification.vibrate = vibrate; Android: Status Bar Notifications

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Some flags that can be used (see the documentation)  FLAG_NO_CLEAR: Notification is not canceled  FLAG_ONGOING_EVENT: Notify ongoing events (e.g. a call)  FLAG_AUTO_CANCEL: Notification disappears as handled  FLAG_INSISTENT: Reproduce sound till notification is handled  FLAG_FOREGROUND_SERVICE: Notification from an active service … Also PendingIntents can have flags  FLAG_CANCEL_CURRENT: PendingIntents are ovewritten  FLAG_UPDATE_CURRENT: PendingIntents are updated (extra field) Android: Status Bar Notifications

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni A Toast Notification is a message that pops up on the surface of the window, and automatically fades out.  Typically created by the foreground activity.  Display a message text and then fades out  Does not accept events! (use Status Bar Notifications instead) Android: Toast Notifications

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni A Toast Notification is a message that pops up on the surface of the window, and automatically fades out. Context context=getApplicationContext(); // Define text and duration of the notification CharSequence text=“This is a Toast Notification!”; int duration=Toast.LENGTH_SHORT; Toast toast=Toast.makeText(context, text, duration); // Send the notification to the screen toast.show(); Android: Toast Notifications

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni  By default, all components of the same application run in the same process and thread (called “main thread” or “UI” thread).  In Manifest.xml, it is possible to specify the process in which a component (e.g. an activity) should run through the attribute android:process.  Processes might be killed by the system to reclaim memory. - Processes’ hierarchy to decide the importance of a process. - Five types: Foreground, Visible, Service, Background, Empty. Android: Processes and Threads

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni  Android natively supports a multi-threading environment.  An Android application can be composed of multiple concurrent threads.  How to create a thread in Android? … Like in Java!  extending the Thread class OR  implementing the Runnable interface  run() method executed when MyThread.start() is launched. Android: Thread Management

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni public class MyThread extends Thread { public MyThread() { super (“My Threads”); } public void run() { // do something } myThread m=new MyThread(); m.start(); Android: Thread Management

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni The UI or main thread is in charge of dispatching events to the user interface widgets, and of drawing the elements of the UI.  Do not block the UI thread.  Do not access the Android UI components from outside the UI thread. QUESTIONS: How to update the UI components from worker threads? Android: Thread Management

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni AsyncTask is a Thread helper class (Android only). Android: AsyncTask  Computation running on a background thread.  Results are published on the UI thread.  AsyncTask must be created on the UI thread.  AsyncTask can be executed only once.  AsyncTask must be canceled to stop the execution. RULES

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni private class MyTask extends AsyncTask Android: AsyncTask Par  type of parameters sent to the AsyncTask Prog  type of progress units published during the execution Res  type of result of the computation private class MyTask extends AsyncTask EXAMPLES

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: AsyncTask The UI Thread invokes the execute method of the AsyncTask: EXECUTION of the ASYNCTASK (new Task()).execute(param1, param2 … paramN) After execute is invoked, the task goes through four steps: 1.onPreExecute()  invoked on the UI thread 2.doInBackground(Params…)  computation of the AsyncTask  can invoke the publishProgress(Progress…) method 3.onProgressUpdate(Progress …)  invoked on the UI thread 4.onPostExecute(Result)  invoked on the UI thread

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Message-passing like mechanisms for Thread communication. MessageQueue  Each thread is associated a queue of messages Handler  Handler of the message associated to the thread Message  Parcelable Object that can be sent/received Android: Thread Management Message queue Handler handleMessage(Message msg) sendMessage(Message msg) THREAD1 THREAD2

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni 2012 Message loop is implicitly defined for the UI thread … but it must be explicitly defined for worker threads. HOW? Use Looper objects … Android: Thread Management public void run() { Looper.prepare(); handler=new Handler() { public void handleMessage(Message msg) { // do something } Looper.loop();

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni A Service is an application that can perform long-running operations in background and does not provide a user interface. Android: Services  Activity  UI, can be disposed when it loses visibility  Service  No UI, disposed when it terminates or when it is terminated by other components A Service provides a robust environment for background tasks …

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: Services  A Service is started when an application component starts it by calling startService(Intent).  Once started, a Service can run in background, even if the component that started it is destroyed.  Termination of a Service: 1. selfStop()  self-termination of the service 2. stopService(Intent)  terminated by others 3. System-decided termination (i.e. memory shortage)

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: Service Lifetime OnCreate() OnStartCommand() RUNNING onDestroy() startService() stopService() selfStop() startService() might cause the execution of OnCreate+OnStartCommand, or only of OnStartCommand, depending whether the Service is already running … OnCreate() executed only once when the Service is created.

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: Foreground Services  A Service provides only a robust environment where to host separate threads of our application.  A Service is not a separate process.  A Service is not a separate Thread (i.e. it runs in the main thread of the application that hosts it).  A Service does nothing except executing what listed in the OnCreate() and OnStartCommand() methods.  Behaviors of Local/Bound Services can be different. COMMON MISTAKES

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: Foreground Services  A Foreground Service is a service that is continuously active in the Status Bar, and thus it is not a good candidate to be killed in case of low memory.  The Notification appears between ONGOING pendings.  To create a Foreground Service: 1.Create a Notification object 2.Call startForeground(id, notification) from onStartCommand()  Call stopForeground() to stop the Service.

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: Service Lifetime OnCreate() OnStartCommand() RUNNING onDestroy() Two Types of Services: 1. Local Services : Start-stop lifecycle as the one shown. 2. Remote/Bound Services : Bound to application components. Allow interactions with them, send requests, get results, IPC facilities. 2. Remote/Bound Services : Bound to application components. Allow interactions with them, send requests, get results, IPC facilities.

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: Bound Service OnCreate() OnBind() onDestroy() onUnbind() onRebind() Client interacts with the Service …  A Bound Service allows components (e.g. Activity) to bind to the services, send requests, receive response.  A Bound Service can serve components running on different processes (IPC).

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: Bound Service Service Component (e.g. Activity) Component (e.g. Activity) IBinder IBinder onBind() ServiceConnection bindService(Intent, ServiceConnection, flags) onServiceConnected(ComponentName, IBinder) When the connection is established, the Service will call the onServiceConnected and pass a reference of the IBinder to the Component.  Through the IBinder, the Component can send requests to the Service …

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: Bound Service  When creating a Service, an IBinder must be created to provide an Interface that clients can use to interact with the Service … HOW? 1.Extending the Binder class (local Services only) -Extend the Binder class and return it from onBind() -Only for a Service used by the same application 1.Using the Android Interface Definition Language (AIDL) - Allow to access a Service from different applications.

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni public class LocalService extends Service { // Binder given to clients private final IBinder sBinder=(IBinder) new public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return sBinder; } class SimpleBinder extends Binder { LocalService getService() { return LocalService.this; } Android: Bound Service

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni public class MyActivity extends Activity { LocalService lService; private ServiceConnection mConnection=new ServiceConnection() public void onServiceConnected(ComponentName arg0, IBinder bind) { SimpleBinder sBinder=(SimpleBinder) bind; lService=sBinder.getService(); …. public void onServiceDisconnected(ComponentName arg0) { } … bindService(new Intent(this,LocalService.class),mConnection,BIND_AUTO_CREATE); }; Android: Bound Service

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: Broadcast Receiver  Registration of the Broadcast Receiver to the event … 1.Event  Intent 2.Registration through XML code 3.Registration through Java code  Handling of the event. A Broadcast Receiver is a component that is activated only when specific events occur (i.e. SMS arrival, phone call, etc).

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: Broadcast Receiver A Broadcast Receiver is a component that is activated only when specific events occur (i.e. SMS arrival, phone call, etc). OnReceive ()  Single-state component …  onReceive() is invoked when the registered event occurs  After handling the event, the Broadcast Receiver is destroyed. BROADCAST RECEIVER LIFETIME EVENT

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: Broadcast Receiver  Registration of the Broadcast Receiver to the event … XML Code:  modify the AndroidManifest.xml

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: Broadcast Receiver  Registration of the Broadcast Receiver to the event … In Java  registerReceiver(BroadcastReceiver, IntentFilter) receiver=new BroadcastReceiver() { … } protected void onResume() { registerReceiver(receiver, new IntentFilter (Intent.ACTION_TIME_TICK) ); } protected void onPause() { unregisterReceiver(receiver); }

Luca Bedogni, Marco Di Felice - Programming with Android – Threads and Services (c) Luca Bedogni Android: Broadcast Receiver How to send the Intents handled by Broadcast Receivers?  void sendBroadcast(Intent intent) … No order of reception is specified  void sendOrderedBroadcast(Intent intent, String permit) … reception order given by the android:priority field sendBroadcast() and startActivity() work on different contexts!