I have a backgorund thread that extends AsyncTask and which I use in activity to read some data from a DB.
I use this background thread in order for not to get my app blocked because of the big amount of data that needs to be retrieved.
Usually I start the thread this way:
public void onResume(){
init_task.execute(db);
}
public class InitTask extends AsyncTask<DBAdapter, GeoPoint, Void> {
...some code here....
}
protected void onPause() {
init_task.cancel(true);
super.onPause();
}
The point is that I start the thread in onResume() and cancel it in onPause()
But now I have a different problem.
I have an autocomplete that displays a dropdown list and when I click on one of these entries I wanna start the backround thread(the data that I retrieve now from DB depends on the item that I click on).
Well for that I’ve implemented a listener and I start the thread there….The problem is that the listener is onCreate() so I can’t use onResume() inside onCReate() ….
Now my problem is that I don’t know how to stop the thread cause once I leave the activity it still retrieves data from my DB…and I want it to stop.
Here is a diagram of my code:
public void onCreate(Bundle savedInstanceState){
textView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
init_task = new InitTask();
init_task.execute(db);
}
});
}
public class InitTask extends AsyncTask<DBAdapter, GeoPoint, Void> {
}
Question: Where should I stop my thread so as soon as I leave the activity it stops retrieving data from the DB……and after I come back it starts again!!?
You can assign the task to instance field and check it for null before calling cancel.
In your activity class (not onCreate() method)
in onPause()
Rest is the same.