为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕哥9229398 2021-12-01 19:34:25
我正在尝试构建一个带有 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;        }    }}我很感激关于如何去做的简明解释。
查看完整描述

2 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

不要这样做

DownloadingClass downloadingClass = new DownloadingClass();

总是在你开始任务之前创建:

new DownloadingClass().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

这是因为您不能重用 AsyncTask。它有状态,一旦状态为“已完成”就不会再次运行。


查看完整回答
反对 回复 2021-12-01
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

如果您在两种下载方法中具有相同的输入/输出类型,您可以DownloadingClass通过为每个方法声明一个对象来使用相同的类型,例如:

DownloadingClass downloadPDF = new DownloadingClass();
DownloadingClass downloadVideo = new DownloadingClass();

然后就打电话downloadPDF.execute();/downloadVideo.execute();


查看完整回答
反对 回复 2021-12-01
  • 2 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信