Android AsyncTask onPreExecute不会被不确定地调用

时间:2012-08-13 22:19:13

标签: android android-asynctask

我有一个AsyncTask,它应该在通过Internet上传一些内容时显示进度条。有时它就像一个魅力,有时它没有显示任何进度条。这是代码:

public class Upload extends AsyncTask<Void, Void, Void> {

    private ProgressDialog dialog = new ProgressDialog(Activity.this);

    protected void onPreExecute() {
        dialog = ProgressDialog.show(Activity.this, "wait...", "", true, true);
    }
    @Override
    protected Void doInBackground(Void... params) {
        //upload stuff
        return null;
    }

    protected void onPostExecute(Void result) {

        try {
            if (dialog.isShowing())
                dialog.dismiss();
            dialog = null;
        } catch (Exception e) {
            // nothing
        }
        Intent next = new Intent(getApplicationContext(), SecondActivity.class);
        startActivity(next);
        }
    }
}

doInBackground和onPostExecute始终工作,有时它总是像魅力一样工作。但有时候,上传时没有进度条。这是竞争条件吗?我不这么认为,但我找不到任何解释。

2 个答案:

答案 0 :(得分:1)

您在课堂上创建了两次对象。 ProgressDialog.show已经返回了一个创建的ProgressDialog对象,但您已经在顶部实例化了它。 ProgressDialog应该被实例化一次,所以尝试删除顶部的实例化并再试一次,如下所示:

private ProgressDialog dialog;

protected void onPreExecute() {
    dialog = ProgressDialog.show(Activity.this, "wait...", "", true, true);
}

答案 1 :(得分:0)

可能是因为void参数导致了这个问题。只是尝试使用Integer作为参数。:

public class Upload extends AsyncTask<Integer, Integer, Integer>