Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

android kill specific thread on action bar event

I want to kill an specific thread but can't figure out a way of make it work. I include all info next, even if it does not seem important:

I use action bar sherlock and want to kill a thread on an action button event. So, i have:

    Thread myThread;
    myThread = new Thread(new Runnable(){
        public void run(){
                functionX();
        }
      });
    myThread.start();

This thread is a long running thread, and funcionX() creates some new threads as well. I want to kill the thread when:

   public boolean onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()) {

    case android.R.id.home:
        myThread.interrupt();
        break;
    };

I've tried with ExecutorService, using submit(runnable) for a Future result and Future.cancel but does not seems to work. I should also mention that functionX() uses http get requests to get data from a JSON service.

like image 498
Moises B. Avatar asked Nov 09 '12 15:11

Moises B.


1 Answers

there are multiple ways you can do this,couple of them can be like

  1. Instead of Thread use TimerTask and call timeTask.cancel() - for interrupting
  2. In the run() method of the thread, keep checking a boolean value to determine whether the thread should be terminated and then you can call interrupt or better throw an Exception
like image 79
rock_win Avatar answered Oct 15 '22 07:10

rock_win