Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Android में AsyncTask समानांतर निष्पादन कैसे करें?

उदाहरण में जाने से पहले, हमें पता होना चाहिए कि AsyncTask क्या है। AsyncTask बैकग्राउंड थ्रेड में ऑपरेशन/एक्शन करता है और मेन थ्रेड पर अपडेट करता है। यहां Android AsyncTask समानांतर निष्पादन के बारे में सरल समाधान है।

AsyncTask समानांतर निष्पादन का उदाहरण

चरण 1 - नया प्रोजेक्ट बनाएं

Android Studio में एक नया प्रोजेक्ट बनाएं: File → New Project पर जाएं और आवश्यक विवरण भरें।

चरण 2 - लेआउट XML में कोड जोड़ें

res/layout/activity_main.xml में निम्नलिखित कोड जोड़ें:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:id="@+id/rootview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#c1c1c1"
    android:gravity="center_horizontal"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/asyncTask"
        android:text="Download"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <ImageView
        android:id="@+id/image"
        android:layout_width="300dp"
        android:layout_height="300dp" />
    <ImageView
        android:id="@+id/image2"
        android:layout_width="300dp"
        android:layout_height="300dp" />
</LinearLayout>

उपरोक्त कोड में हमने दो ImageViews और एक बटन घोषित किया है। जब उपयोगकर्ता बटन पर क्लिक करता है, तो यह दो अलग-अलग इंटरनेट स्रोतों से इमेज डाउनलोड करेगा और ImageViews में जोड़ देगा।

चरण 3 - MainActivity.java में कोड जोड़ें

src/MainActivity.java में निम्नलिखित कोड जोड़ें:

package com.example.andy.myapplication;

import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
    private ImageView imageView, imageView2;
    private ProgressDialog progressDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Button button = findViewById(R.id.asyncTask);
        imageView = findViewById(R.id.image);
        imageView2 = findViewById(R.id.image2);
        
        button.setOnClickListener(v -> {
            new AsyncTaskExample2().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, 
                "https://www.tutorialspoint.com/cprogramming/images/logo.png");
            new AsyncTaskExample().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, 
                "https://www.tutorialspoint.com/images/tp-logo-diamond.png");
        });
    }

    private class AsyncTaskExample extends AsyncTask {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog = new ProgressDialog(MainActivity.this);
            progressDialog.setMessage("Downloading...");
            progressDialog.setIndeterminate(true);
            progressDialog.setCancelable(false);
            progressDialog.show();
        }

        @Override
        protected Bitmap doInBackground(String... strings) {
            try {
                URL imageUrl = new URL(strings[0]);
                HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
                conn.setDoInput(true);
                conn.connect();
                InputStream is = conn.getInputStream();
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inPreferredConfig = Bitmap.Config.RGB_565;
                return BitmapFactory.decodeStream(is, null, options);
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            if (progressDialog != null && progressDialog.isShowing()) {
                progressDialog.dismiss();
            }
            if (bitmap != null && imageView != null) {
                imageView.setImageBitmap(bitmap);
            }
        }
    }

    private class AsyncTaskExample2 extends AsyncTask {
        @Override
        protected Bitmap doInBackground(String... strings) {
            try {
                URL imageUrl = new URL(strings[0]);
                HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
                conn.setDoInput(true);
                conn.connect();
                InputStream is = conn.getInputStream();
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inPreferredConfig = Bitmap.Config.RGB_565;
                return BitmapFactory.decodeStream(is, null, options);
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            if (bitmap != null && imageView2 != null) {
                imageView2.setImageBitmap(bitmap);
            }
        }
    }
}

उपरोक्त कोड में, हमने दो या अधिक AsyncTask चलाने के लिए executeOnExecutor() का उपयोग किया है। Android अधिकतम पांच AsyncTask को समानांतर चलाने का समर्थन करता है।

चरण 4 - Manifest में परमिशन जोड़ें

AndroidManifest.xml में इंटरनेट परमिशन जोड़ें:

<uses-permission android:name="android.permission.INTERNET"/>

ऐप चलाएं

अपने Android डिवाइस को कंप्यूटर से कनेक्ट करें और ऐप चलाएं। बटन पर क्लिक करने पर, यह प्रोग्रेस बार के साथ इंटरनेट स्रोत से इमेज डाउनलोड करेगा और दोनों इमेज समानांतर में प्रदर्शित करेगा।

महत्वपूर्ण: Android 11 (API 30) से AsyncTask डिप्रिकेटेड है। आधुनिक ऐप्स के लिए Coroutines, ExecutorService, या RxJava का उपयोग समानांतर निष्पादन के लिए करें।

  1. Android में synchronizedSortedSet का उपयोग कैसे करें? Android में synchronizedSortedSet का उपयोग कैसे करें?

    Android में SynchronizedSortedSet का उपयोग यह उदाहरण दर्शाता है कि Android में Collections.synchronizedSortedSet() का उपयोग करके थ्रेड-सेफ सॉर्टेड सेट कैसे बनाया जाए। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project पर जाएं और आवश्यक विवरण भरकर एक नया प्रोजेक्ट बनाएं। चरण 2: लेआउट

  1. Android में synchronizedSet का उपयोग कैसे करें? Android में synchronizedSet का उपयोग कैसे करें?

    Android में SynchronizedSet का उपयोग यह उदाहरण दर्शाता है कि Android में Collections.synchronizedSet() का उपयोग करके थ्रेड-सेफ सेट कैसे बनाया जाए। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project पर जाएं और आवश्यक विवरण भरकर एक नया प्रोजेक्ट बनाएं। चरण 2: लेआउट XML जोड़ें (res/layo

  1. Android में ToggleButton का उदाहरण Android में ToggleButton का उदाहरण

    Android ToggleButton - ऑन/ऑफ स्टेट्स के साथ बटन ToggleButton एक दो-स्थिति वाला बटन है (चेक्ड/अनचेक्ड) जो CompoundButton से विरासत में मिला है। ऑन/ऑफ सेटिंग्स के लिए आदर्श। चरण 1: प्रोजेक्ट बनाएं Android Studio: File → New Project। चरण 2: लेआउट (activity_main.xml) <?xml version=1.0 encoding=utf-