toom
toom

Reputation: 13316

Termination of a thread not possible

I've got an activity with the following code:

Handler dataLoaderHandler = new Handler();
int mInterval = 3000;
public MyActivity myself;
Thread dataLoader = new Thread( new Runnable() {
    @Override 
    public void run() {
        Log.e("MyActivity","ReloadData");
        new DataLoader(new JSONData(myself)).execute(Configuration.dataURL);
        dataLoaderHandler.postDelayed(dataLoader, mInterval);
    }
});

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    myself = this;
    ... some other stuff...
    dataLoader.start();
}


... other code ...

@Override
protected void onDestroy() {
    super.onDestroy();
    Log.e("MyActivity","onDestroy ending thread");
    try { dataLoader.join(); } catch(Exception e) { e.printStackTrace(); }
    Log.e("MyActivity","onDestroy called");
}

When I hit the back button my activity gets destroyed but the thread still continues to run every 3 seconds. Why is the thread not stopped or better said deleted?

Upvotes: 0

Views: 70

Answers (2)

vipul mittal
vipul mittal

Reputation: 17401

try:

boolean finished=false;
Handler dataLoaderHandler = new Handler();
int mInterval = 3000;
public MyActivity myself;
Thread dataLoader = new Thread( new Runnable() {
    @Override 
    public void run() {
        if(!finished){
        Log.e("MyActivity","ReloadData");
        new DataLoader(new JSONData(myself)).execute(Configuration.dataURL);
        dataLoaderHandler.postDelayed(dataLoader, mInterval);}
    }
});


@Override
    protected void onStop() {
        super.onStop();
            finished=true;
    }

Upvotes: 1

nKn
nKn

Reputation: 13761

Because you haven't stopped it. Since calling stop() on a thread is already deprecated, you should stop the thread within the thread itself. This can be easily done by calling return on it.

However, don't expect your Thread to finish immediately you hit your back button. The Thread will probably run up until Android OS determines it has to (basically, it may take a while to stop even you call it).

You may want to check that question I made a time ago, it's well answered.

Upvotes: 1

Related Questions