Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IntentService will be killed after I stop my application

Tags:

android

I am referring to android design considerations: AsyncTask vs Service (IntentService?)

According to the discussion, AsyncTask does not suit, because it is tightly "bound" to your Activity

So, I launch a Thread (I assume AsyncTask and Thread belong to same category), have an infinity running loop in it and did the following testing.

  • I quit my application, by keeping pressing on back soft key, till I saw home screen. Thread is still running.
  • I kill my application, by going to Manage apps -> App -> Force stop. Thread is stopped.

So, I expect after I change from Thread to Service, my Service will keep alive even after I quit or kill my app.


Intent intent = new Intent(this, SyncWithCloudService.class);
startService(intent);

public class SyncWithCloudService extends IntentService {
    public SyncWithCloudService() {
        super("SyncWithCloudService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        int i = 0;
        while (true) {
            Log.i("CHEOK", "Service i is " + (i++));
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                Log.i("CHEOK", "", ex);
            }
        }
    }
}

    // Doesn't matter whether I use "android:process" or not.
    <service 
        android:name="com.xxx.xml.SyncWithCloudService" 
        android:process=".my_process" >
    </service>

However, my finding is that,

  • I quit my application, by keeping pressing on back soft key, till I saw home screen. Service is still running.
  • I kill my application, by going to Manage apps -> App -> Force stop. Service is stopped.

It seems that the behaviour of Service and Thread are the same. So, why I should use Service instead of Thread? Is there anything I had missed out? I thought my Service suppose to keep running, even after I kill my app?

like image 990
Cheok Yan Cheng Avatar asked Jun 28 '12 09:06

Cheok Yan Cheng


People also ask

How do I disable IntentService?

To stop a IntentService, call the method stopService (Intent service). It request that a given application service be stopped. If the service is not running, nothing happens. Otherwise it is stopped.

How stop service when app is killed android?

First, the easiest way to do what you're trying to do is to launch an Android Broadcast when the app is killed manually, and define a custom BroadcastReceiver to trigger a service restart after that. Dear Dr Sabri Allani, If your Service is started by your app then actually your service is running on main process.

Does IntentService run on background thread?

IntentService runs on its own thread. It will stop itself when it's done.

What is the purpose of IntentService?

IntentService is an extension of the Service component class that handles asynchronous requests (expressed as Intent s) on demand. Clients send requests through Context.


1 Answers

Nope. Service will stop running when you kill your application. When you kill your application all components of it are killed (activities, services, etc.).

In general the behaviour of Thread and Service are similar. However, If you start a Thread from an Activity and then shutdown the activity (ie: quit your application), eventually Android will notice that your process has no active components in it (since Android doesn't recognize your Thread as an active component) and it will just kill your process, thereby killing the thread.

However, if you have a Service running, then Android will notice that you have a service running and not kill it so readily. However, it is still possible that Android will kill your service process if it isn't "in use".

like image 122
David Wasser Avatar answered Oct 10 '22 01:10

David Wasser