In the following example if someone if someone presses the home button while the task is running, then the task is cancelled. In this particular cancelling it should interrupt if running.
public class MainActivity extends AppCompatActivity {
private static AtomicBoolean inWork;
private CustomAsyncTask asyncTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
inWork = new AtomicBoolean(false);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
executeAsyncTaskOperation();
}
});
}
private void executeAsyncTaskOperation() {
Boolean[] bools = new Boolean[10];
for (int k = 0; k < 10; k++) {
if (k % 2 == 0) {
bools[k] = true;
} else {
bools[k] = false;
}
}
asyncTask = new CustomAsyncTask(this);
asyncTask.execute(bools);
}
//pressing the home button while the task is running will trigger the onStop being called.
@Override
protected void onStop() {
if (asyncTask.getStatus() == AsyncTask.Status.RUNNING) {
asyncTask.cancel(true);
}
super.onStop();
}
private static class CustomAsyncTask extends AsyncTask<Boolean, Void, Integer> {
private Context context;
private ProgressDialog progressDialog;
public CustomAsyncTask(Context context) {
this.context = context;
}
@Override
protected void onCancelled() {
inWork.set(false);
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
Log.d(CustomAsyncTask.class.getCanonicalName(), "progressdialog is dismissed.");
}
}
@Override
protected void onPreExecute() {
progressDialog = ProgressDialog.show(context, "Please wait...", "Loading data from web");
}
@Override
protected Integer doInBackground(Boolean... params) {
int count = 0;
inWork.set(true);
try {
Thread.sleep(1000);
Log.d(CustomAsyncTask.class.getCanonicalName(), "doInBackground");
if (!isCancelled()) {
for (Boolean param : params) {
if (param) {
count++;
}
}
} else {
Log.d(CustomAsyncTask.class.getCanonicalName(), "doInBackground is cancelled.");
}
} catch (Exception exc) {
Log.e(CustomAsyncTask.class.getCanonicalName(), "exception");
count = 0;
}
return count;
}
@Override
protected void onPostExecute(Integer s) {
if (!isCancelled()) {
inWork.set(false);
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
}
if (s != null && s > 0) {
Toast.makeText(context, "finished loading: " + s + " tasks", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, "finished unsuccessfully!", Toast.LENGTH_LONG).show();
}
} else {
Log.d(CustomAsyncTask.class.getCanonicalName(), "onPostExecute is cancelled.");
}
}
}
}
click below button to copy code from our android learning website - android tutorial - team
Related Searches to Cancelling an AsyncTask in Android AsyncTask
android asynctask cancel not workingasynctask cancel doinbackgroundcancel asynctask on back press androidcancel asynctask when activity is destroyedcancel asynctask c#async task cancelandroid cancel download asynctaskcheck if asynctask is runningandroid phones best android phone android apps android developer android update android android sdk android versions android emulator kodi app poweramp android app development apps for android android software android development android apps download android app store android api developer android android programming eclipse android android studio tutorial android development tutorial android tutorial android service google android android download android device android video what is android android system