SlideShare a Scribd company logo
1 of 21
Download to read offline
Background operation
How to handle all your jobs
+RobertoOrgiu
@_tiwiz
+MatteoBonifazi
@mbonifazi
Threading & Background Tasks
Multithreading is essential if you want an Android app
with a great user experience, but how do you know which
techniques can help solve your problem?
Android threads
Android application has at least one main thread
The runtime env manages the UI thread.
Long-running foreground operations can cause problems
and interfere with the responsiveness of your user interface,
which can even cause system errors.
Android offers several classes that help you off-load
operations onto a separate thread that runs in the
background.
AsyncTask
AsyncTask represents a convenient way to
offload work from the main thread.
AsyncTask
Is meant for simple operations
Allows to run instructions in the background and to
synchronize again with the main thread. It also reporting
progress of the running tasks. AsyncTasks should be used
for short background operations which need to update the
user interface.
AsyncTask example
private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
OkHttpClient client = new OkHttpClient();
Request request =new Request.Builder().url(urls[0]).build();
Response response = client.newCall(request).execute();
…..
}
@Override
protected void onPostExecute(String result) {
textView.setText(result);
}
}
Run your code as a callback on UI ThreadRun your code on a new Thread
Parallel execution - AsyncTask
// ImageLoader extends AsyncTask
DownloadWebPageTask imageLoader = new DownloadWebPageTask( imageView );
// Execute in parallel
imageLoader.executeOnExecutor( AsyncTask.THREAD_POOL_EXECUTOR,
"http://url.com/image.png" );
Intent Service
IntentService provides straightforward
structure for running an operation on a single
background thread.
IntentService
Preferred way to perform simple background
operations
Allows it to handle long-running operations without
affecting your user interface's responsiveness.
It isn't affected by most user interface lifecycle events, so it
continues to run in circumstances that would shut down an
AsyncTask
IntentService
Limitations
● It can't interact directly with your user interface. To put its
results in the UI, you have to send them to an Activity.
● Work requests run sequentially. If an operation is running
in an IntentService, and you send it another request, the
request waits until the first operation is finished.
● An operation running on an IntentService can't be
interrupted.
IntentService lifecycle
public class RSSPullService extends IntentService {
public RSSPullService() {
super(RSSPullService.class.getName());
}
@Override
protected void onHandleIntent(Intent workIntent) {
// Gets data from the incoming Intent
String dataString = workIntent.getDataString();
...
// Do work here, based on the contents of dataString
...
}
Other callbacks of a regular Service
component, such as onStartCommand() are
automatically invoked by IntentService.
Put here your background job
IntentService in the AndroidManifest
<application
android:icon="@drawable/icon"
android:label="@string/app_name">
...
<!--
Because android:exported is set to "false",
the service is only available to this app.
-->
<service
android:name=".RSSPullService"
android:exported="false"/>
...
<application/>
The Activity that sends work requests to
the service uses an explicit Intent
Create a work request to the IntentService
mServiceIntent = new Intent(getActivity(), RSSPullService.class);
mServiceIntent.setData(Uri.parse(dataUrl));
...
// Starts the IntentService
getActivity().startService(mServiceIntent);
Going forward
Youtube Video
https://www.youtube.com/watch?v=jtlRNNhane
https://www.youtube.com/watch?v=9FweabuBi1U
https://www.youtube.com/watch?v=tBHPmQQNiS8
Reference Link
https://developer.android.com/guide/components/processes-and-threads.html
https://developer.android.com/training/run-background-service/index.html
https://developer.android.com/training/multiple-threads/index.html
JobScheduler
Creating a job
public class AwesomeJobService extends JobService {
@Override
public boolean onStartJob(final JobParameters params) {
//AWESOME STUFF HERE
return true; // or false
}
@Override
public boolean onStopJob(JobParameters params) {
//AWESOME CLEANING HERE
return false; //or true
}
}
Scheduling a job
ComponentName component = new ComponentName(context, AwesomeJobService.class);
JobInfo.Builder builder = new JobInfo.Builder(jobId, component)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setRequiresDeviceIdle(true)
...
.setRequiresCharging(false);
builder.setExtras(parameters);
JobScheduler s = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
s.schedule(builder.build());
Going forward - 2
Reference Link
https://developer.android.com/topic/performance/scheduling.html
https://developer.android.com/reference/android/app/job/JobScheduler.html
https://github.com/googlesamples/android-JobScheduler/
+MatteoBonifazi
@mbonifazi
Thank You!
+RobertoOrgiu
@_tiwiz

More Related Content

Similar to Handle background tasks in Android

Android Connecting to internet Part 2
Android  Connecting to internet Part 2Android  Connecting to internet Part 2
Android Connecting to internet Part 2Paramvir Singh
 
MobileAppDev Handout#4
MobileAppDev Handout#4MobileAppDev Handout#4
MobileAppDev Handout#4trupti1976
 
Asynchronous Programming in Android
Asynchronous Programming in AndroidAsynchronous Programming in Android
Asynchronous Programming in AndroidJohn Pendexter
 
Threads handlers and async task, widgets - day8
Threads   handlers and async task, widgets - day8Threads   handlers and async task, widgets - day8
Threads handlers and async task, widgets - day8Utkarsh Mankad
 
Android service, aidl - day 1
Android service, aidl - day 1Android service, aidl - day 1
Android service, aidl - day 1Utkarsh Mankad
 
Services I.pptx
Services I.pptxServices I.pptx
Services I.pptxRiziX3
 
Java Svet - Communication Between Android App Components
Java Svet - Communication Between Android App ComponentsJava Svet - Communication Between Android App Components
Java Svet - Communication Between Android App ComponentsAleksandar Ilić
 
Java Svet - Communication Between Android App Components
Java Svet - Communication Between Android App ComponentsJava Svet - Communication Between Android App Components
Java Svet - Communication Between Android App ComponentsPSTechSerbia
 
Think Async: Understanding the Complexity of Multithreading - Avi Kabizon & A...
Think Async: Understanding the Complexity of Multithreading - Avi Kabizon & A...Think Async: Understanding the Complexity of Multithreading - Avi Kabizon & A...
Think Async: Understanding the Complexity of Multithreading - Avi Kabizon & A...DroidConTLV
 
Android Training (Services)
Android Training (Services)Android Training (Services)
Android Training (Services)Khaled Anaqwa
 
Not Quite As Painful Threading
Not Quite As Painful ThreadingNot Quite As Painful Threading
Not Quite As Painful ThreadingCommonsWare
 
Android Best Practices - Thoughts from the Trenches
Android Best Practices - Thoughts from the TrenchesAndroid Best Practices - Thoughts from the Trenches
Android Best Practices - Thoughts from the TrenchesAnuradha Weeraman
 
Android 101 Session @thejunction32
Android 101 Session @thejunction32Android 101 Session @thejunction32
Android 101 Session @thejunction32Eden Shochat
 
[Android] Multiple Background Threads
[Android] Multiple Background Threads[Android] Multiple Background Threads
[Android] Multiple Background ThreadsNikmesoft Ltd
 
Threading model in windows store apps
Threading model in windows store appsThreading model in windows store apps
Threading model in windows store appsMirco Vanini
 
Architecture your android_application
Architecture your android_applicationArchitecture your android_application
Architecture your android_applicationMark Brady
 
Active object of Symbian in the lights of client server architecture
Active object of Symbian in the lights of client server architectureActive object of Symbian in the lights of client server architecture
Active object of Symbian in the lights of client server architectureSomenath Mukhopadhyay
 

Similar to Handle background tasks in Android (20)

Android Connecting to internet Part 2
Android  Connecting to internet Part 2Android  Connecting to internet Part 2
Android Connecting to internet Part 2
 
MobileAppDev Handout#4
MobileAppDev Handout#4MobileAppDev Handout#4
MobileAppDev Handout#4
 
Asynchronous Programming in Android
Asynchronous Programming in AndroidAsynchronous Programming in Android
Asynchronous Programming in Android
 
Threads handlers and async task, widgets - day8
Threads   handlers and async task, widgets - day8Threads   handlers and async task, widgets - day8
Threads handlers and async task, widgets - day8
 
Android service, aidl - day 1
Android service, aidl - day 1Android service, aidl - day 1
Android service, aidl - day 1
 
Services I.pptx
Services I.pptxServices I.pptx
Services I.pptx
 
Java Svet - Communication Between Android App Components
Java Svet - Communication Between Android App ComponentsJava Svet - Communication Between Android App Components
Java Svet - Communication Between Android App Components
 
Java Svet - Communication Between Android App Components
Java Svet - Communication Between Android App ComponentsJava Svet - Communication Between Android App Components
Java Svet - Communication Between Android App Components
 
Think Async: Understanding the Complexity of Multithreading - Avi Kabizon & A...
Think Async: Understanding the Complexity of Multithreading - Avi Kabizon & A...Think Async: Understanding the Complexity of Multithreading - Avi Kabizon & A...
Think Async: Understanding the Complexity of Multithreading - Avi Kabizon & A...
 
Android session-5-sajib
Android session-5-sajibAndroid session-5-sajib
Android session-5-sajib
 
Android Training (Services)
Android Training (Services)Android Training (Services)
Android Training (Services)
 
Not Quite As Painful Threading
Not Quite As Painful ThreadingNot Quite As Painful Threading
Not Quite As Painful Threading
 
Background Thread
Background ThreadBackground Thread
Background Thread
 
Android Best Practices - Thoughts from the Trenches
Android Best Practices - Thoughts from the TrenchesAndroid Best Practices - Thoughts from the Trenches
Android Best Practices - Thoughts from the Trenches
 
Android101
Android101Android101
Android101
 
Android 101 Session @thejunction32
Android 101 Session @thejunction32Android 101 Session @thejunction32
Android 101 Session @thejunction32
 
[Android] Multiple Background Threads
[Android] Multiple Background Threads[Android] Multiple Background Threads
[Android] Multiple Background Threads
 
Threading model in windows store apps
Threading model in windows store appsThreading model in windows store apps
Threading model in windows store apps
 
Architecture your android_application
Architecture your android_applicationArchitecture your android_application
Architecture your android_application
 
Active object of Symbian in the lights of client server architecture
Active object of Symbian in the lights of client server architectureActive object of Symbian in the lights of client server architecture
Active object of Symbian in the lights of client server architecture
 

More from Matteo Bonifazi

Invading the home screen
Invading the home screenInvading the home screen
Invading the home screenMatteo Bonifazi
 
Engage user with actions
Engage user with actionsEngage user with actions
Engage user with actionsMatteo Bonifazi
 
Kotlin killed Java stars
Kotlin killed Java starsKotlin killed Java stars
Kotlin killed Java starsMatteo Bonifazi
 
Firebase-ized your mobile app
Firebase-ized  your mobile appFirebase-ized  your mobile app
Firebase-ized your mobile appMatteo Bonifazi
 
Android - Displaying images
Android - Displaying imagesAndroid - Displaying images
Android - Displaying imagesMatteo Bonifazi
 
The Firebase tier for your mobile app - DevFest CH
The Firebase tier for your mobile app - DevFest CHThe Firebase tier for your mobile app - DevFest CH
The Firebase tier for your mobile app - DevFest CHMatteo Bonifazi
 
Engage and retain users in the android world - Droidcon Italy 2016
Engage and retain users in the android world - Droidcon Italy 2016Engage and retain users in the android world - Droidcon Italy 2016
Engage and retain users in the android world - Droidcon Italy 2016Matteo Bonifazi
 
UaMobitech - App Links and App Indexing API
UaMobitech - App Links and App Indexing APIUaMobitech - App Links and App Indexing API
UaMobitech - App Links and App Indexing APIMatteo Bonifazi
 
The unconventional devices for the Android video streaming
The unconventional devices for the Android video streamingThe unconventional devices for the Android video streaming
The unconventional devices for the Android video streamingMatteo Bonifazi
 
Google IO - Five months later
Google IO - Five months laterGoogle IO - Five months later
Google IO - Five months laterMatteo Bonifazi
 
Video Streaming: from the native Android player to uncoventional devices
Video Streaming: from the native Android player to uncoventional devicesVideo Streaming: from the native Android player to uncoventional devices
Video Streaming: from the native Android player to uncoventional devicesMatteo Bonifazi
 

More from Matteo Bonifazi (15)

Invading the home screen
Invading the home screenInvading the home screen
Invading the home screen
 
Engage user with actions
Engage user with actionsEngage user with actions
Engage user with actions
 
Kotlin killed Java stars
Kotlin killed Java starsKotlin killed Java stars
Kotlin killed Java stars
 
Android JET Navigation
Android JET NavigationAndroid JET Navigation
Android JET Navigation
 
Firebase-ized your mobile app
Firebase-ized  your mobile appFirebase-ized  your mobile app
Firebase-ized your mobile app
 
Backendless apps
Backendless appsBackendless apps
Backendless apps
 
Android - Saving data
Android - Saving dataAndroid - Saving data
Android - Saving data
 
Android - Displaying images
Android - Displaying imagesAndroid - Displaying images
Android - Displaying images
 
The Firebase tier for your mobile app - DevFest CH
The Firebase tier for your mobile app - DevFest CHThe Firebase tier for your mobile app - DevFest CH
The Firebase tier for your mobile app - DevFest CH
 
Engage and retain users in the android world - Droidcon Italy 2016
Engage and retain users in the android world - Droidcon Italy 2016Engage and retain users in the android world - Droidcon Italy 2016
Engage and retain users in the android world - Droidcon Italy 2016
 
UaMobitech - App Links and App Indexing API
UaMobitech - App Links and App Indexing APIUaMobitech - App Links and App Indexing API
UaMobitech - App Links and App Indexing API
 
The unconventional devices for the Android video streaming
The unconventional devices for the Android video streamingThe unconventional devices for the Android video streaming
The unconventional devices for the Android video streaming
 
Google IO - Five months later
Google IO - Five months laterGoogle IO - Five months later
Google IO - Five months later
 
Video Streaming: from the native Android player to uncoventional devices
Video Streaming: from the native Android player to uncoventional devicesVideo Streaming: from the native Android player to uncoventional devices
Video Streaming: from the native Android player to uncoventional devices
 
Enlarge your screen
Enlarge your screenEnlarge your screen
Enlarge your screen
 

Handle background tasks in Android

  • 1. Background operation How to handle all your jobs +RobertoOrgiu @_tiwiz +MatteoBonifazi @mbonifazi
  • 2. Threading & Background Tasks Multithreading is essential if you want an Android app with a great user experience, but how do you know which techniques can help solve your problem?
  • 3. Android threads Android application has at least one main thread The runtime env manages the UI thread. Long-running foreground operations can cause problems and interfere with the responsiveness of your user interface, which can even cause system errors. Android offers several classes that help you off-load operations onto a separate thread that runs in the background.
  • 5. AsyncTask represents a convenient way to offload work from the main thread.
  • 6. AsyncTask Is meant for simple operations Allows to run instructions in the background and to synchronize again with the main thread. It also reporting progress of the running tasks. AsyncTasks should be used for short background operations which need to update the user interface.
  • 7. AsyncTask example private class DownloadWebPageTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... urls) { OkHttpClient client = new OkHttpClient(); Request request =new Request.Builder().url(urls[0]).build(); Response response = client.newCall(request).execute(); ….. } @Override protected void onPostExecute(String result) { textView.setText(result); } } Run your code as a callback on UI ThreadRun your code on a new Thread
  • 8. Parallel execution - AsyncTask // ImageLoader extends AsyncTask DownloadWebPageTask imageLoader = new DownloadWebPageTask( imageView ); // Execute in parallel imageLoader.executeOnExecutor( AsyncTask.THREAD_POOL_EXECUTOR, "http://url.com/image.png" );
  • 10. IntentService provides straightforward structure for running an operation on a single background thread.
  • 11. IntentService Preferred way to perform simple background operations Allows it to handle long-running operations without affecting your user interface's responsiveness. It isn't affected by most user interface lifecycle events, so it continues to run in circumstances that would shut down an AsyncTask
  • 12. IntentService Limitations ● It can't interact directly with your user interface. To put its results in the UI, you have to send them to an Activity. ● Work requests run sequentially. If an operation is running in an IntentService, and you send it another request, the request waits until the first operation is finished. ● An operation running on an IntentService can't be interrupted.
  • 13. IntentService lifecycle public class RSSPullService extends IntentService { public RSSPullService() { super(RSSPullService.class.getName()); } @Override protected void onHandleIntent(Intent workIntent) { // Gets data from the incoming Intent String dataString = workIntent.getDataString(); ... // Do work here, based on the contents of dataString ... } Other callbacks of a regular Service component, such as onStartCommand() are automatically invoked by IntentService. Put here your background job
  • 14. IntentService in the AndroidManifest <application android:icon="@drawable/icon" android:label="@string/app_name"> ... <!-- Because android:exported is set to "false", the service is only available to this app. --> <service android:name=".RSSPullService" android:exported="false"/> ... <application/> The Activity that sends work requests to the service uses an explicit Intent
  • 15. Create a work request to the IntentService mServiceIntent = new Intent(getActivity(), RSSPullService.class); mServiceIntent.setData(Uri.parse(dataUrl)); ... // Starts the IntentService getActivity().startService(mServiceIntent);
  • 16. Going forward Youtube Video https://www.youtube.com/watch?v=jtlRNNhane https://www.youtube.com/watch?v=9FweabuBi1U https://www.youtube.com/watch?v=tBHPmQQNiS8 Reference Link https://developer.android.com/guide/components/processes-and-threads.html https://developer.android.com/training/run-background-service/index.html https://developer.android.com/training/multiple-threads/index.html
  • 18. Creating a job public class AwesomeJobService extends JobService { @Override public boolean onStartJob(final JobParameters params) { //AWESOME STUFF HERE return true; // or false } @Override public boolean onStopJob(JobParameters params) { //AWESOME CLEANING HERE return false; //or true } }
  • 19. Scheduling a job ComponentName component = new ComponentName(context, AwesomeJobService.class); JobInfo.Builder builder = new JobInfo.Builder(jobId, component) .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) .setRequiresDeviceIdle(true) ... .setRequiresCharging(false); builder.setExtras(parameters); JobScheduler s = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE); s.schedule(builder.build());
  • 20. Going forward - 2 Reference Link https://developer.android.com/topic/performance/scheduling.html https://developer.android.com/reference/android/app/job/JobScheduler.html https://github.com/googlesamples/android-JobScheduler/