【问题标题】:Android - Stop AsyncTask when back button is pressed and return to previous ActivityAndroid - 按下后退按钮时停止 AsyncTask 并返回上一个活动
【发布时间】:2011-11-21 08:25:49
【问题描述】:

我有一个 AsyncTask,我希望它在按下后退按钮时停止执行。我还希望应用返回到之前显示的 Activity。看来我已经设法停止了任务,但应用程序没有返回到以前的活动。有任何想法吗?这是我的代码的摘录

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);
    }

}

问候。

【问题讨论】:

标签: android android-activity android-asynctask back-button


【解决方案1】:
pd.setCancelable(true);
    pd.setOnCancelListener(cancelListener);
    bCancelled=false;

 pd is your progressdialog box

现在使用 cancelListner

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

【讨论】:

  • 它在一定程度上起到了作用。我已经取消了“实现 OnDismissListner”和 OnDismiss 方法。并在 onCancel 中添加了finis()。
  • @pradeep 用于布尔检查是否取消
【解决方案2】:

在您的活动中,覆盖后退按钮,停止其中的 AsyncTask,并为当前活动调用完成。

@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);
}

【讨论】:

  • MyTask.stop 是什么意思?没有这种方法。
  • 现在问题出在 YourCurrentActivity.finish() 上。无法从 Activity 类型对非静态方法 finish() 进行静态引用
  • 我知道。我必须把它放在finis() 之前。现在我将检查它是否有效。
  • 试过了。它会停止执行(像以前一样),但不会返回到以前的活动。我必须再次按下返回按钮。
  • 我通过 Intent 调用 Activity
【解决方案3】:

您是否尝试过在onDismiss() 方法中添加finish() 调用:

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

【讨论】:

    【解决方案4】:

    试试这个……

    progress_dialog.setCancelable(true);
    progress_dialog.setOnCancelListener(new OnCancelListener() {
    
        @Override
        public void onCancel(DialogInterface dialog) {
            // TODO Auto-generated method stub
            YourActivity.this.finish();
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多