Asynctask永远不会完成

时间:2016-03-27 08:29:18

标签: android android-asynctask

我正在尝试使用 Asynctask ,但每当我获得其状态时,它总会返回运行。

我的代码有什么问题?

这就是我加载asynctask的方式:

                LongOperation LongOperation = new LongOperation(finalLink[0], download_data);
                LongOperation.execute();
                Toast.makeText(getApplicationContext(), LongOperation.getStatus().toString(), Toast.LENGTH_SHORT).show();

这是我的asynctask:

private class LongOperation extends AsyncTask<Void, Void, Void> {
    public Download_data download_data;
    public String link;
    public boolean loading;
    public LongOperation(String link, Download_data download_data){
        this.link = link;
        this.download_data = download_data;
    }

    @Override
    protected Void doInBackground(Void... params) {
        download_data.download_data_from_link(link);
        return null;
    }

    protected void onPostExecute() {
        finish();
    }

    @Override
    protected void onPreExecute() {
        Toast.makeText(getApplicationContext(),"Executed.", Toast.LENGTH_LONG).show();
    }

    @Override
    protected void onProgressUpdate(Void... values) {
    }
}

2 个答案:

答案 0 :(得分:1)

因为您在执行后立即检查状态:

LongOperation.execute();
Toast.makeText(getApplicationContext(), LongOperation.getStatus().toString(), Toast.LENGTH_SHORT).show();

AsyncTask在后​​台线程上运行。因此,在调用execute()控件后移动显示Toast。到那时,task仍然在运行。

您将在onPreExecute的{​​{1}}收到完成状态。

AsyncTask

如果您对@Override protected void onPostExecute(Void mVoid) { Toast.makeText(getApplicationContext(), this.getStatus().toString(), Toast.LENGTH_SHORT).show(); finish(); } 感到困惑,请阅读:Java Multithreading

答案 1 :(得分:0)

onPostExecute()的正确签名确实是;

protected void onPostExecute (Result result)

由于你没有覆盖AsyncTask中的那个,而是定义了另一个重载,所以它(从而finish()永远不会被调用)。

修复签名,它应该按预期完成。

相关问题