Class AsyncTask<Params,​Progress,​Result>

  • Type Parameters:
    Params -
    Progress -
    Result -

    public abstract class AsyncTask<Params,​Progress,​Result>
    extends java.lang.Object
    AsyncTask provides use of asynchronous operations without ocupying UI Thread with non user interface tasks. In addition, you can easily publish results without the need of manupulating Thread, see the example bellow (Copy and paste this code inside a Container instance):
     Button dldButton = new Button("download zip");
     add(dldButton, CENTER, CENTER);
    
     final ProgressBar progressBar = new ProgressBar();
     add(progressBar, CENTER, AFTER + UnitsConverter.toPixels(DP + 16),
             PARENTSIZE + 80, PREFERRED);
    
     dldButton.addPressListener((c) -> {
         new AsyncTask() {
             int progress = 0;
             UpdateListener updateListener = null;
    
             @Override
             protected Object doInBackground(Object... objects) {
                 HttpStream.Options o = new HttpStream.Options();
                 o.httpType = HttpStream.GET;
                 final String url = "";
    
                 if(url.startsWith("https:"))
                     o.socketFactory = new SSLSocketFactory();
    
                 try {
                     HttpStream p = new HttpStream(new URI(url));
                     File f = new File("file.zip", File.CREATE_EMPTY);
                     int totalSize = p.contentLength;
                     byte [] buff = new  byte[4096];
                     BufferedStream bs = new BufferedStream(f, BufferedStream.WRITE, 4096);
                     int counter = 0;
                     while(true) {
                         int size = p.readBytes(buff, 0, buff.length);
                         counter += size;
                         progress = (int)((counter/(double)totalSize)*100);
                         if(size <= 0) break;
                         bs.writeBytes(buff, 0, size);
                     }
                     progress = 100;
                     bs.close();
                     p.close();
                     f.close();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
                 return null;
             }
    
             @Override
             protected void onPreExecute() {
                 dldButton.setEnabled(false);
                 MainWindow.getMainWindow().addUpdateListener(updateListener = (elapsed) -> {
                     progressBar.setValue(progress);
                 });
             }
    
             @Override
             protected void onPostExecute(Object result) {
                 dldButton.setEnabled(true);
                 MainWindow.getMainWindow().removeUpdateListener(updateListener);
             }
         }.execute();
     });
    
     
    Since:
    TotalCross 4.3.9