AsyncTask: ব্যাকগ্রাউন্ড টাস্কের পুরনো পদ্ধতি (Deprecated API 30+)
নোট: Android 11 (API 30) থেকে AsyncTask ডিপ্রিকেট। নতুন প্রজেক্টে Kotlin Coroutines, RxJava, বা ExecutorService ব্যবহার করুন। এটি শুধু লিগ্যাসি কোড বুঝতে রাখা হয়।
AsyncTask-এর ৪টি মেথড
onPreExecute()— UI থ্রেডে, টাস্ক শুরু হওয়ার আগে (প্রোগ্রেসবার দেখান)۔doInBackground(Params...)— ব্যাকগ্রাউন্ড থ্রেডে, ভারী কাজ (নেটওয়ার্ক, DB)۔onProgressUpdate(Progress...)— UI থ্রেডে, প্রগ্রেস আপডেট।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)
}