猿问

如何为不同的进程运行相同的 AsyncTask 类?

我正在尝试构建一个带有 2 个按钮的演示应用程序,一个下载视频,另一个下载 PDF。我想通过AsyncTask. 到目前为止,我已经有了带有已实现方法的入门代码。我还没有添加我想要下载的代码,因为我想弄清楚单独下载背后的逻辑,所以现在,我有日志消息。


这是代码:


public class MainActivity extends AppCompatActivity {

    Button downloadVideo, downloadPDF;

    DownloadingClass downloadingClass = new DownloadingClass();

    private static final String TAG = "omar.asynctaskdemo;";


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        downloadVideo = findViewById(R.id.download_video);

        downloadPDF = findViewById(R.id.download_pdf);


        downloadVideo.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {}

        });


        downloadPDF.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {}

        });

    }


    private class DownloadingClass extends AsyncTask<Void, Void, Void>{

        @Override

        protected void onPreExecute() {

            super.onPreExecute();

            Log.d(TAG, "doInBackground: Before");

        }


        @Override

        protected void onPostExecute(Void aVoid) {

            super.onPostExecute(aVoid);

            Log.d(TAG, "doInBackground: After");

        }


        @Override

        protected void onProgressUpdate(Void... values) {

            super.onProgressUpdate(values);

            Log.d(TAG, "doInBackground: Progress");

        }


        @Override

        protected Void doInBackground(Void... voids) {

            Log.d(TAG, "doInBackground: Content to download");

            return null;

        }

    }

}

我很感激关于如何去做的简明解释。


慕哥9229398
浏览 124回答 2
2回答

侃侃尔雅

不要这样做DownloadingClass&nbsp;downloadingClass&nbsp;=&nbsp;new&nbsp;DownloadingClass();总是在你开始任务之前创建:new&nbsp;DownloadingClass().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);这是因为您不能重用 AsyncTask。它有状态,一旦状态为“已完成”就不会再次运行。

料青山看我应如是

如果您在两种下载方法中具有相同的输入/输出类型,您可以DownloadingClass通过为每个方法声明一个对象来使用相同的类型,例如:DownloadingClass&nbsp;downloadPDF&nbsp;=&nbsp;new&nbsp;DownloadingClass(); DownloadingClass&nbsp;downloadVideo&nbsp;=&nbsp;new&nbsp;DownloadingClass();然后就打电话downloadPDF.execute();/downloadVideo.execute();
随时随地看视频慕课网APP

相关分类

Java
我要回答