简体   繁体   中英

Android - Stop AsyncTask when back button is pressed and return to previous Activity

I've an AsyncTask and I want it to stip execution when back button is pressed. I also want the app to return to the previous displayed Activity. It seems I've managed in stop the Task but the app doesn't return to the previous activity. Any ideas? This is an extract from my code

private class MyTask extends AsyncTask<Void, Void, Void> implements OnDismissListener{
    private boolean exception= false;

    @Override
    protected void onPreExecute(){
        pd = ProgressDialog.show(
                IscrizioniActivity.this,
                "Please wait...",
                "Loading the data",
                true,
                true,
                new DialogInterface.OnCancelListener(){
                    public void onCancel(DialogInterface dialog) {
                        MyTask.this.cancel(true);
                    }
                }
        );
    }

    @Override
    protected Void doInBackground(Void... voids) {
        //do something
        return (null);
    }

    @Override
    protected void onPostExecute(Void voids) {
        pd.dismiss();
        //do something

    }

    public void onDismiss(DialogInterface dialog) {

        this.cancel(true);
    }

}

Regards.

pd.setCancelable(true);
    pd.setOnCancelListener(cancelListener);
    bCancelled=false;

 pd is your progressdialog box

and now use cancelListner

    OnCancelListener cancelListener=new OnCancelListener(){
    @Override
    public void onCancel(DialogInterface arg0){
        bCancelled=true;
        finish();
    }
};

In your activity, override Back Button, stop the AsyncTask in it, and call finish for current activity.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
         MyTask.cancel();
      IscrizioniActivity.this.finish();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

Try this one...

progress_dialog.setCancelable(true);
progress_dialog.setOnCancelListener(new OnCancelListener() {

    @Override
    public void onCancel(DialogInterface dialog) {
        // TODO Auto-generated method stub
        YourActivity.this.finish();
        }
    });

Have you tried adding a finish() call in the onDismiss() method:

public void onDismiss(DialogInterface dialog) {
    this.cancel(true);
    IscrizioniActivity.this.finish();
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM