Service vs IntentService in the Android platform

后端 未结 11 604
挽巷
挽巷 2020-11-22 03:38

I am seeking an example of something that can be done with an IntentService that cannot be done with a Service (and vice-versa)?

I also bel

相关标签:
11条回答
  • 2020-11-22 04:08

    Tejas Lagvankar wrote a nice post about this subject. Below are some key differences between Service and IntentService.

    When to use?

    • The Service can be used in tasks with no UI, but shouldn't be too long. If you need to perform long tasks, you must use threads within Service.

    • The IntentService can be used in long tasks usually with no communication to Main Thread. If communication is required, can use Main Thread handler or broadcast intents. Another case of use is when callbacks are needed (Intent triggered tasks).

    How to trigger?

    • The Service is triggered by calling method startService().

    • The IntentService is triggered using an Intent, it spawns a new worker thread and the method onHandleIntent() is called on this thread.

    Triggered From

    • The Service and IntentService may be triggered from any thread, activity or other application component.

    Runs On

    • The Service runs in background but it runs on the Main Thread of the application.

    • The IntentService runs on a separate worker thread.

    Limitations / Drawbacks

    • The Service may block the Main Thread of the application.

    • The IntentService cannot run tasks in parallel. Hence all the consecutive intents will go into the message queue for the worker thread and will execute sequentially.

    When to stop?

    • If you implement a Service, it is your responsibility to stop the service when its work is done, by calling stopSelf() or stopService(). (If you only want to provide binding, you don't need to implement this method).

    • The IntentService stops the service after all start requests have been handled, so you never have to call stopSelf().

    0 讨论(0)
  • 2020-11-22 04:11

    The Major Difference between a Service and an IntentService is described as follows:

    Service :

    1.A Service by default, runs on the application's main thread.(here no default worker thread is available).So the user needs to create a separate thread and do the required work in that thread.

    2.Allows Multiple requests at a time.(Multi Threading)

    IntentService :

    1.Now, coming to IntentService, here a default worker thread is available to perform any operation. Note that - You need to implement onHandleIntent() method ,which receives the intent for each start request, where you can do the background work.

    2.But it allows only one request at a time.

    0 讨论(0)
  • 2020-11-22 04:13

    Android IntentService vs Service

    1.Service

    • A Service is invoked using startService().
    • A Service can be invoked from any thread.
    • A Service runs background operations on the Main Thread of the Application by default. Hence it can block your Application’s UI.
    • A Service invoked multiple times would create multiple instances.
    • A service needs to be stopped using stopSelf() or stopService().
    • Android service can run parallel operations.

    2. IntentService

    • An IntentService is invoked using Intent.
    • An IntentService can in invoked from the Main thread only.
    • An IntentService creates a separate worker thread to run background operations.
    • An IntentService invoked multiple times won’t create multiple instances.
    • An IntentService automatically stops after the queue is completed. No need to trigger stopService() or stopSelf().
    • In an IntentService, multiple intent calls are automatically Queued and they would be executed sequentially.
    • An IntentService cannot run parallel operation like a Service.

    Refer from Here

    0 讨论(0)
  • 2020-11-22 04:14

    If someone can show me an example of something that can be done with an IntentService and can not be done with a Service and the other way around.

    By definition, that is impossible. IntentService is a subclass of Service, written in Java. Hence, anything an IntentService does, a Service could do, by including the relevant bits of code that IntentService uses.

    Starting a service with its own thread is like starting an IntentService. Is it not?

    The three primary features of an IntentService are:

    • the background thread

    • the automatic queuing of Intents delivered to onStartCommand(), so if one Intent is being processed by onHandleIntent() on the background thread, other commands queue up waiting their turn

    • the automatic shutdown of the IntentService, via a call to stopSelf(), once the queue is empty

    Any and all of that could be implemented by a Service without extending IntentService.

    0 讨论(0)
  • 2020-11-22 04:15

    Adding points to the accepted answer:

    See the usage of IntentService within Android API. eg:

    public class SimpleWakefulService extends IntentService {
        public SimpleWakefulService() {
            super("SimpleWakefulService");
        }
    
        @Override
        protected void onHandleIntent(Intent intent) {  ...}
    

    To create an IntentService component for your app, define a class that extends IntentService, and within it, define a method that overrides onHandleIntent().

    Also, see the source code of the IntentService, it's constructor and life cycle methods like onStartCommand...

      @Override
        public int More ...onStartCommand(Intent intent, int flags, int startId) {
           onStart(intent, startId);
            return mRedelivery ? START_REDELIVER_INTENT : START_NOT_STICKY;
        }
    

    Service together an AsyncTask is one of best approaches for many use cases where the payload is not huge. or just create a class extending IntentSerivce. From Android version 4.0 all network operations should be in background process otherwise the application compile/build fails. separate thread from the UI. The AsyncTask class provides one of the simplest ways to fire off a new task from the UI thread. For more discussion of this topic, see the blog post

    from Android developers guide:

    IntentService is a base class for Services that handle asynchronous requests (expressed as Intents) on demand. Clients send requests through startService(Intent) calls; the service is started as needed, handles each Intent, in turn, using a worker thread, and stops itself when it runs out of work.

    Design pattern used in IntentService

    : This "work queue processor" pattern is commonly used to offload tasks from an application's main thread. The IntentService class exists to simplify this pattern and take care of the mechanics. To use it, extend IntentService and implement onHandleIntent(Intent). IntentService will receive the Intents, launch a worker thread, and stop the service as appropriate.

    All requests are handled on a single worker thread -- they may take as long as necessary (and will not block the application's main loop), but only one request will be processed at a time.

    The IntentService class provides a straightforward structure for running an operation on a single background thread. This allows it to handle long-running operations without affecting your user interface's responsiveness. Also, an IntentService isn't affected by most user interface lifecycle events, so it continues to run in circumstances that would shut down an AsyncTask.

    An IntentService has a few 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. However, in most cases

    IntentService is the preferred way to simple background operations

    **

    Volley Library

    There is the library called volley-library for developing android networking applications The source code is available for the public in GitHub.

    The android official documentation for Best practices for Background jobs: helps better understand on intent service, thread, handler, service. and also Performing Network Operations

    0 讨论(0)
提交回复
热议问题