How to force kill a service programmatically in Android

Hey there,

Its been so annoying when our own created service will refuse to stop or restarts automatically when we call stopService.

As you are querying for,if you wanna know

How to debug a service in Android(Even if it is an isolated process).Click Me.

Introduction - Use Cases

  • When we call stopService function,the service's onDestroy function will be executed and what ever code we wrote on that function will be executed like toasting,logging,etc.But, how in the world to make it stop,when it is already executing some codes in another thread.
  • Some techies may refer to put the return value of onStart function to START_NOT_STICKY.So that this tells the operating system,not to restart the service after a user stops it or operating system itself kills the service due to low memory or something else.But sometimes,the worst scenario is even after stopping the service which returns START_NOT_STICKY in onStart function,may not be destroyed when some codes are being executed in another thread or may not exit even if the service do nothing.
Steps - How to force kill a service programmatically,so that it will not be restarted or will not keep running on in Android
  • As i already stated in my previous post.This is also just a matter of single line code.
  • Paste the below code into your service's onDestroy function.
Process.killProcess(Process.myPid());

  • The above line of code will kill the service by querying its own process ID and tells the operating system to kill it ungracefully.
  • Go to your activity(GUI of your android application) and try calling stopService and see the magic.
  • Hope you can see the below picture for better understanding.

Drawbacks
  • As you already the above code will forcefully kill the service from execution,so that you may want to take care that if any other asynchronous thread working in the background will be forcefully killed and any operation like writing to file or database or uploading image to server or encoding or decoding image or videos on that thread will be killed ungracefully.
  • It might corrupt your files or ruin your server while uploading,etc.
  • Sometimes onDestroy function may not be called,when you use stopService to stop the service.So that you can create a custom function in the service,so that you can call that function from your activity by binding intents.(Any queries about this can be solved in comments.).
Its better to stop a service by using a global static variable so that the service can kill itself giving threads to stop by itself.This makes a clean ending for your android service.I am on the way to create a post on the mentioned topic.It will be here as soon as possible.

Enjoy killing service...:)
Share on Google Plus

About ShihabSoft

I am Shihab, people used to call me a Security researcher or sometimes a Reverse engineer or sometimes a creepy hacker ;). Got a brain full of knowledge in different programming languages, and not more nor less I am a blogger too :).
    Blogger Comment
    Facebook Comment

2 comments:-

  1. Doesn't work! I use a remote thread but it is never killed!

    ReplyDelete
    Replies
    1. Killing a process with it's exact PID would definitely kill the services bound to it. Doesn't matter if it's a remote thread or an isolated service.

      Delete

Don't be shy. Just leave your comments, am so happy to assist you. And, don't forgot that I am such a nice person who you are dealing with :)