Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我是否需要使用多个AsyncTask子类?_Java_Android_Multithreading_Task - Fatal编程技术网

Java 我是否需要使用多个AsyncTask子类?

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

我的应用程序具有FTP功能,现在我想为各种操作(连接、下载、上载、文件列表等)实现ProgressDialog 我在stack上找到了这个片段,它似乎是一个很好的起点

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。不确定它是否适合你(这取决于你的需要)

对多个事务使用AsyncTask将起作用,但这不是合适的解决方案。如前所述:它可能导致问题。我建议您看看(这是关于REST客户机的,但所描述的模式也适用于您)。遵循以下规则:

  • 在单独的线程中执行事务
  • 每个线程都必须从服务启动
  • 要保留事务状态,请使用数据库(不要将状态保留在内存中)
  • 使用SyncAdapter。不确定它是否适合你(这取决于你的需要)

如果您指的是
活动的内部类,那么将其作为
活动的内部类是没有问题的。只要你只在
活动中需要它
我想在一次I/O讲座中,他们特别警告过你不要这样做?我再查一下。除非我误解了,否则我没见过。如果您找到了,请让我知道从I/O退房10谢谢!我将简要介绍一下,如果您所指的是
活动的内部类,那么将其作为
活动的内部类是没有问题的。只要你只在
活动中需要它
我想在一次I/O讲座中,他们特别警告过你不要这样做?我再查一下。除非我误解了,否则我没见过。如果你找到了,请告诉我退房