কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েড AsyncTask উদাহরণ ও ব্যাখ্যা (লিগ্যাসি)


AsyncTask: ব্যাকগ্রাউন্ড টাস্কের পুরনো পদ্ধতি (Deprecated API 30+)

নোট: Android 11 (API 30) থেকে AsyncTask ডিপ্রিকেট। নতুন প্রজেক্টে Kotlin Coroutines, RxJava, বা ExecutorService ব্যবহার করুন। এটি শুধু লিগ্যাসি কোড বুঝতে রাখা হয়।

AsyncTask-এর ৪টি মেথড

  1. onPreExecute() — UI থ্রেডে, টাস্ক শুরু হওয়ার আগে (প্রোগ্রেসবার দেখান)۔
  2. doInBackground(Params...) — ব্যাকগ্রাউন্ড থ্রেডে, ভারী কাজ (নেটওয়ার্ক, DB)۔
  3. onProgressUpdate(Progress...) — UI থ্রেডে, প্রগ্রেস আপডেট।
  4. onPostExecute(Result) — UI থ্রেডে, ফলাফল হ্যান্ডেল।

জেনেরিক টাইপস

AsyncTask<Params, Progress, Result>
  • Params: execute()-এ পাস করা আর্গুমেন্টের টাইপ।
  • Progress: প্রগ্রেস আপডেটের টাইপ।
  • Result: doInBackground-এর রিটার্ন টাইপ।

উদাহরণ: ইমেজ ডাউনলোড

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    private ProgressDialog dialog;
    private ImageView imageView;
    
    public DownloadImageTask(ImageView iv) { this.imageView = iv; }
    
    @Override
    protected void onPreExecute() {
        dialog = ProgressDialog.show(MainActivity.this, "", "ডাউনলোড হচ্ছে...", true);
    }
    
    @Override
    protected Bitmap doInBackground(String... urls) {
        try {
            URL url = new URL(urls[0]);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setDoInput(true);
            conn.connect();
            InputStream is = conn.getInputStream();
            return BitmapFactory.decodeStream(is);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
    
    @Override
    protected void onPostExecute(Bitmap bitmap) {
        if (dialog != null && dialog.isShowing()) dialog.dismiss();
        if (bitmap != null && imageView != null) {
            imageView.setImageBitmap(bitmap);
        }
    }
}

// কল করা:
new DownloadImageTask(imageView).execute("https://example.com/image.png");

Manifest-এ পারমিশন

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

আধুনিক বিকল্প (Coroutines)

// Kotlin Coroutines + Coil/Glide
lifecycleScope.launch {
    val bitmap = withContext(Dispatchers.IO) { downloadImage(url) }
    imageView.setImageBitmap(bitmap)
}

  1. অ্যান্ড্রয়েডে AsyncTask থ্রেড বন্ধ করার পদ্ধতি

  2. Android-এ স্ট্রিং-এ Subscript ও Superscript ব্যবহার

  3. Android ImageView-এ Zoom In/Out ইমপ্লিমেন্টেশন

  4. Android-এ AsyncTask-এর জন্য টাইমআউট সেট করার পদ্ধতি