我正在尝试构建一个带有 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。它有状态,一旦状态为“已完成”就不会再次运行。
料青山看我应如是
TA贡献1772条经验 获得超8个赞
如果您在两种下载方法中具有相同的输入/输出类型,您可以DownloadingClass
通过为每个方法声明一个对象来使用相同的类型,例如:
DownloadingClass downloadPDF = new DownloadingClass(); DownloadingClass downloadVideo = new DownloadingClass();
然后就打电话downloadPDF.execute();
/downloadVideo.execute();
添加回答
举报
0/150
提交
取消