IntentServices5:40 with Ben Deitch
In this video we’ll learn about IntentServices and refactor our app to use one!
Using a service to handle intense one at a time on a separate thread 0:00 like we've done with our download service, 0:05 is one of the most common ways that developers make use of services. 0:07 In fact, it's so common that Android created a special class 0:12 to make writing a service like this, a lot easier. 0:16 And that class is intent service. 0:20 Let's see how we can refactor our code to use an intent service. 0:23 Let's start by creating a new class for our intent service and 0:28 let's name it DownloadIntentService. 0:33 Then let's make it extend IntentService, 0:40 and let's use Alt+Enter to implement the required method. 0:43 This onHandleIntentMethod is where we'll handle our intent. 0:51 Now before we forget it, Let's head over to our AndroidManifest and 0:56 declare our new service. 1:01 After you create an application component like a service or 1:03 activity, it's usually a good idea to add it to your manifest right away. 1:06 It's super easy to forget about and 1:12 it will definitely throw an error, trust me I've tested it. 1:14 We'll need to declare it just like we did with download service, 1:19 which also gives me an opportunity to show off one of my favorite keyboard shortcuts. 1:22 Place your cursor anywhere on the download service line and 1:28 hit command or control D, which stands for duplicate. 1:32 Now we just have to change download service to download intense service and 1:37 we're done. 1:43 But it looks like we need to add a constructor 1:45 to our download intense service. 1:48 Back in our intense service, let's add that constructor, public 1:51 DownloadIntentService. 1:56 And inside the constructor, lets add a call to super 2:05 and pass in DownloadIntentService as a string. 2:12 This sets 2:15 the name of the thread where our intense service will be doing its work. 2:20 Then, let's add a call to 2:26 setIntentRedelivery and pass in true. 2:30 By default, an intent service will use start sticky. 2:36 But we needed to use start redeliver intent. 2:41 This method lets us change on start commands return value for 2:45 our intent service, even though we can't see it. 2:49 All right, now let's copy our download song method from download handler. 2:53 And paste it in the bottom of our IntentService class and 3:02 create our TAG constant. 3:07 Get SimpleName. 3:20 And I'll get rid of this extra space up here. 3:23 Then and the On handle intent method. 3:26 Let's retrieve our song from the intent and pass it to the download song method. 3:29 String_song = intent.getStringExtra 3:33 MainActivity.KEY_SONG; and 3:41 then downloadSong song. 3:48 Finally, over in MainActivity Inside 3:53 our download buttons OnClickListener lets start our 3:58 DownloadIntentService instead of our download service. 4:02 Perfect! 4:11 Now let's test the app and make sure it still works just like it did before. 4:13 And if we tap the download button, 4:24 and change our log level to debug, 4:29 we can see our song start downloading. 4:33 Then in the Android Device Monitor, we can kill the process. 4:38 And we can see that our service is scheduled to be restarted in 52 seconds. 4:49 At least for me. 4:58 And once it's restarted our songs will continue downloading. 5:01 Using an intense service like this is exactly the same 5:06 as what we were doing before. 5:09 In fact you can delete download service, download thread and 5:12 download handler because we're not using them anymore. 5:17 But you might want to keep them around as a reference to look back to later. 5:21 We've learned so much about services in such a short time. 5:26 I know this stuff can seem difficult but 5:30 the more time you spend with it, the easier it gets. 5:32 Remember, if you have any questions, don't hesitate to ask in the community. 5:35
You need to sign up for Treehouse in order to download course files.Sign up