Java 如何为不同的进程运行相同的AsyncTask类?
我正在尝试构建一个带有两个按钮的演示应用程序,一个下载视频,另一个下载PDF。我想通过Java 如何为不同的进程运行相同的AsyncTask类?,java,android,android-asynctask,Java,Android,Android Asynctask,我正在尝试构建一个带有两个按钮的演示应用程序,一个下载视频,另一个下载PDF。我想通过AsyncTask在后台线程中进行下载。到目前为止,我已经有了带有实现方法的启动程序代码。我还没有为我想下载的内容添加代码,因为我想弄清楚单独下载背后的逻辑,所以现在我有日志消息 代码如下: public class MainActivity extends AppCompatActivity { Button downloadVideo, downloadPDF; DownloadingCla
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;
}
}
}
public类MainActivity扩展了AppCompatActivity{
按钮下载视频,下载PDF;
DownloadingClass DownloadingClass=新的DownloadingClass();
私有静态最终字符串TAG=“omar.asynctaskdemo;”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
downloadVideo=findviewbyd(R.id.download\u video);
downloadPDF=findviewbyd(R.id.download\u pdf);
downloadVideo.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){}
});
下载pdf.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){}
});
}
私有类下载类扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
Log.d(标签“doInBackground:Before”);
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
Log.d(标签“doInBackground:After”);
}
@凌驾
受保护的void onProgressUpdate(void…值){
super.onProgressUpdate(值);
Log.d(标签“doInBackground:Progress”);
}
@凌驾
受保护的空位背景(空位…空位){
d(标签“doInBackground:要下载的内容”);
返回null;
}
}
}
如果您在两种下载方法中有相同的输入/输出类型,您可以通过为每个方法声明一个对象来使用相同的下载类,如:
DownloadingClass downloadPDF = new DownloadingClass();
DownloadingClass downloadVideo = new DownloadingClass();
然后只需调用downloadPDF.execute()代码>/下载视频。执行()代码>
或者您可以通过执行器服务来管理它们:
如果两种下载方法的输入/输出类型相同,则可以通过为每个方法声明一个对象来使用相同的下载类,如:
DownloadingClass downloadPDF = new DownloadingClass();
DownloadingClass downloadVideo = new DownloadingClass();
然后只需调用downloadPDF.execute()代码>/下载视频。执行()代码>
或者您可以通过执行器服务来管理它们:
不要这样做
DownloadingClass downloadingClass = new DownloadingClass();
始终在任务开始前创建:
new DownloadingClass().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
这是因为您不能重用AsyncTask。它具有状态,一旦状态为“完成”,它将不会再次运行。不要这样做
DownloadingClass downloadingClass = new DownloadingClass();
始终在任务开始前创建:
new DownloadingClass().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
这是因为您不能重用AsyncTask。它有状态,状态为“完成”后将不会再次运行。是,但我将为视频和PDF使用不同的下载链接,因此API调用将不同。是,但我将为视频和PDF使用不同的下载链接,因此API调用将不同。我已接受您的回答。如果你认为这是一个被问得很好的问题,你能给我一张赞成票吗?我已经接受了你的答案。如果你认为这是一个问得很好的问题,你能给我一票吗?