Android 将哪些参数传递到AsyncTask<;arg1、arg2、arg3>;?

Android 将哪些参数传递到AsyncTask<;arg1、arg2、arg3>;?,android,arguments,android-asynctask,Android,Arguments,Android Asynctask,我不明白我应该在这里写些什么,这些争论会在哪里结束?我到底应该放什么,它会放在哪里?我需要包括所有3个还是可以包括1,2,20个 请参阅以下链接: 传递的参数不能超过三个,如果只想传递一个参数,请对其他两个参数使用void 1. private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> 2. protected class InitTask extends AsyncTask<Conte

我不明白我应该在这里写些什么,这些争论会在哪里结束?我到底应该放什么,它会放在哪里?我需要包括所有3个还是可以包括1,2,20个

请参阅以下链接:

  • 传递的参数不能超过三个,如果只想传递一个参数,请对其他两个参数使用void

    1. private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> 
    
    
    2. protected class InitTask extends AsyncTask<Context, Integer, Integer>
    
    1。私有类DownloadFilesTask扩展了AsyncTask
    2.受保护类InitTask扩展了AsyncTask
    

    异步任务由在后台线程上运行的计算定义,其结果在UI线程上发布。异步任务由3种通用类型(称为参数、进度和结果)和4个步骤(称为onPreExecute、doInBackground、onProgressUpdate和onPostExecute)定义。

    谷歌的Android文档说明:

    异步任务由3种泛型类型(称为Params、Progress和Result)和4个步骤(称为onPreExecute、doInBackground、onProgressUpdate和onPostExecute)定义

    AsyncTask的泛型类型:

    异步任务使用的三种类型如下:

    Params, the type of the parameters sent to the task upon execution.
    Progress, the type of the progress units published during the background computation.
    Result, the type of the result of the background computation.
    
    异步任务并不总是使用所有类型。要将类型标记为未使用,只需使用类型Void:

     private class MyTask extends AsyncTask<Void, Void, Void> { ... }
    
    AsyncTask类中最重要的方法。你必须把所有你想在后台做的事情都放在这里,放在与主线程不同的线程中。这里我们有一个输入值,它是一个类型为“X”的对象数组(您在标题中看到了吗?我们有“…extends AsyncTask”这些是输入参数的类型),并返回一个类型为“Z”的对象

       protected void onProgressUpdate(Y y){
    
       }
    
    此方法使用publishProgress(y)方法调用,通常在您希望在主屏幕中显示任何进度或信息时使用,如在后台显示操作进度的进度条

      protected void onPostExecute(Z z){
    
      }
    
    此方法在后台操作完成后调用。作为输入参数,您将收到doInBackground方法的输出参数

    X、Y和Z类型如何?

    从上述结构可以推断:

     X – The type of the input variables value you want to set to the background process. This can be an array of objects.
    
     Y – The type of the objects you are going to enter in the onProgressUpdate method.
    
     Z – The type of the result from the operations you have done in the background process.
    
    我们如何称呼这项课外任务?仅用以下两行:

    MyTask myTask = new MyTask();
    
    myTask.execute(x);
    
    其中x是类型x的输入参数

    一旦我们运行了任务,我们就可以从“外部”了解它的状态。使用“getStatus()”方法

     myTask.getStatus();
    
    我们可以收到以下状态:

    正在运行-表示任务正在运行

    挂起-表示任务尚未执行

    已完成-表示onPostExecute(Z)已完成

    关于使用AsyncTask的提示

    new DownLoadTask().execute("Paradise.mp3");
    
  • 不要手动调用onPreExecute、doInBackground和onPostExecute方法。这是由系统自动完成的

  • 不能在另一个AsyncTask或线程内调用AsyncTask。方法execute的调用必须在UI线程中完成

  • onPostExecute方法在UI线程中执行(这里您可以调用另一个AsyncTask!)

  • 任务的输入参数可以是一个对象数组,这样您就可以放置您想要的任何对象和类型


  • 我来不及参加聚会了,但我想这可能会有帮助

    • 简而言之,AsyncTask中有3个参数

    • 在DoInBackground中使用的输入参数(字符串…参数)

    • 用于显示OnProgressUpdate中使用的进度状态的参数(字符串…状态)

    • OnPostExecute中使用的结果参数(字符串…结果)

    • 注:-[参数类型可根据您的要求而变化]

    保持简单!
    AsyncTask
    是在后台线程中运行的后台任务。它接受输入,执行进度,并给出输出

    ie
    AsyncTask

    在我看来,当我们试图记住
    AsyncTask

    中的参数时,主要的困惑来源于此 关键是不要记忆
    如果你能想象你的任务真正需要做什么,那么用正确的签名编写
    AsyncTask
    将是小菜一碟。
    只要弄清楚你的输入进度输出是什么,你就可以开始了

    例如:

    任务的核心!
    doInBackgound()
    方法是
    异步任务中最重要的方法,因为

    • 只有此方法在后台线程中运行,并将数据发布到UI线程
    • 它的签名随
      AsyncTask
      参数的变化而变化
    让我们看看这种关系

    doInBackground()
    onpostsecute()
    onProgressUpdate()
    也是相关的

    显示代码
    那么我将如何为DownloadTask编写代码呢

    DownloadTask extends AsyncTask<String,Integer,String>{
    
          @Override
          public void onPreExecute()
          {}
    
          @Override
          public String doInbackGround(String... params)
          {
                   // Download code
                   int downloadPerc = // calculate that
                   publish(downloadPerc);
    
                   return "Download Success";
          }
    
          @Override
          public void onPostExecute(String result)
          {
              super.onPostExecute(result);
          }
    
          @Override
          public void onProgressUpdate(Integer... params)
          {
                 // show in spinner, access UI elements
          }
    
    }
    

    完美的解释,老兄+1。各位议员,请留意。你就是这样解释的。虽然很长,但非常容易理解。谢谢你,Kartik。很好的解释,现在我对Asyntask非常清楚了。:)谢谢Kartik帮我澄清了很多事情,回答得很好!这个视觉效果非常有用。我将开始使用更多类似这样的视觉效果来展示当代码流不直接或技术或模式不常见时,类型及其相关变量是如何联系在一起的。我希望其他人能做得更多。谢谢视觉效果,你能为WeakAsyncTask添加吗?@kAmol当然,我会尝试为
    WeakAsyncTask
    创建一个流程,总有一天我会把它框起来,放在墙上,这样我就不必一直回到这个线程来参考了。
    //在spinner中显示,访问UI ele
    
    DownloadTask extends AsyncTask<String,Integer,String>{
    
          @Override
          public void onPreExecute()
          {}
    
          @Override
          public String doInbackGround(String... params)
          {
                   // Download code
                   int downloadPerc = // calculate that
                   publish(downloadPerc);
    
                   return "Download Success";
          }
    
          @Override
          public void onPostExecute(String result)
          {
              super.onPostExecute(result);
          }
    
          @Override
          public void onProgressUpdate(Integer... params)
          {
                 // show in spinner, access UI elements
          }
    
    }
    
    new DownLoadTask().execute("Paradise.mp3");