Java 我是否需要使用多个AsyncTask子类?
我的应用程序具有FTP功能,现在我想为各种操作(连接、下载、上载、文件列表等)实现ProgressDialog 我在stack上找到了这个片段,它似乎是一个很好的起点Java 我是否需要使用多个AsyncTask子类?,java,android,multithreading,task,Java,Android,Multithreading,Task,我的应用程序具有FTP功能,现在我想为各种操作(连接、下载、上载、文件列表等)实现ProgressDialog 我在stack上找到了这个片段,它似乎是一个很好的起点 public class LoadData extends AsyncTask<Void, Void, Void> { ProgressDialog progressDialog; //declare other objects as per your need @Ove
public class LoadData extends AsyncTask<Void, Void, Void> {
ProgressDialog progressDialog;
//declare other objects as per your need
@Override
protected void onPreExecute()
{
progressDialog= ProgressDialog.show(FTPConnector.this, "Please wait for ","Process Description Text", true);
//do initialization of required objects objects here
};
@Override
protected Void doInBackground(Void... params)
{
//do loading operation here
return null;
}
@Override
protected void onPostExecute(Void result)
{
super.onPostExecute(result);
progressDialog.dismiss();
};
}
公共类LoadData扩展异步任务{
进行对话进行对话;
//根据需要声明其他对象
@凌驾
受保护的void onPreExecute()
{
progressDialog=progressDialog.show(FTPConnector.this,“请等待”,“过程描述文本”,true);
//在此处执行所需对象的初始化
};
@凌驾
受保护的Void doInBackground(Void…参数)
{
//在这里进行装载操作
返回null;
}
@凌驾
受保护的void onPostExecute(void结果)
{
super.onPostExecute(结果);
progressDialog.disclose();
};
}
我把它实现为FTPConnector类的一个子类,它包含连接、下载、上传、列表文件、重命名和删除的各种方法。我是否需要为每个FTP操作创建ASyncTask的子类?如果没有,我能做什么
我是否需要为每个FTP操作创建ASyncTask的子类
不一定,但这取决于AsyncTask
方法中使用的逻辑。如果您让它们处理操作所需的功能,那么您就可以了。但是,根据每个操作的逻辑,如果为每个操作创建单独的类,则可能更容易控制
但是,请注意,根据
该任务只能执行一次(如果尝试第二次执行,将引发异常)
我是否需要为每个FTP操作创建ASyncTask的子类
不一定,但这取决于AsyncTask
方法中使用的逻辑。如果您让它们处理操作所需的功能,那么您就可以了。但是,根据每个操作的逻辑,如果为每个操作创建单独的类,则可能更容易控制
但是,请注意,根据
该任务只能执行一次(如果尝试第二次执行,将引发异常)
首先,我的印象是,使用AsyncTask作为活动的子类是不可取的,因为任务将保留对启动它的活动的引用,这可能会导致问题。我通常使用AsyncTask作为自己的类,并在执行它的活动的上下文中传递。你应该调查一下 其次,您可以为每个服务器事务执行不同的任务。我想这取决于他们有多少人或者你的应用程序有多复杂。除此之外,您可以在doInBackground方法中使用一个带有switch语句的类,并将string标记作为vararg之一传入(假设您的任务仅将字符串作为初始参数)。这看起来既麻烦又丑陋
我可能只会为每个事务创建一个任务。首先,我的印象是,使用AsyncTask作为活动的子类是不可取的,因为任务将保留对启动它的活动的引用,这可能会导致问题。我通常使用AsyncTask作为自己的类,并在执行它的活动的上下文中传递。你应该调查一下 其次,您可以为每个服务器事务执行不同的任务。我想这取决于他们有多少人或者你的应用程序有多复杂。除此之外,您可以在doInBackground方法中使用一个带有switch语句的类,并将string标记作为vararg之一传入(假设您的任务仅将字符串作为初始参数)。这看起来既麻烦又丑陋
我可能只会为每个事务创建一个任务。对多个事务使用AsyncTask将起作用,但这不是合适的解决方案。如前所述:它可能导致问题。我建议您看看(这是关于REST客户机的,但所描述的模式也适用于您)。遵循以下规则:
- 在单独的线程中执行事务
- 每个线程都必须从服务启动
- 要保留事务状态,请使用数据库(不要将状态保留在内存中)
- 使用SyncAdapter。不确定它是否适合你(这取决于你的需要)
- 在单独的线程中执行事务
- 每个线程都必须从服务启动
- 要保留事务状态,请使用数据库(不要将状态保留在内存中)
- 使用SyncAdapter。不确定它是否适合你(这取决于你的需要)
活动的内部类,那么将其作为活动的内部类是没有问题的。只要你只在活动中需要它
我想在一次I/O讲座中,他们特别警告过你不要这样做?我再查一下。除非我误解了,否则我没见过。如果您找到了,请让我知道从I/O退房10谢谢!我将简要介绍一下,如果您所指的是活动的内部类,那么将其作为活动的内部类是没有问题的。只要你只在活动中需要它
我想在一次I/O讲座中,他们特别警告过你不要这样做?我再查一下。除非我误解了,否则我没见过。如果你找到了,请告诉我退房