Android AsyncTask ব্যাকগ্রাউন্ড থ্রেডে ব্যাকগ্রাউন্ড অপারেশন এবং মেইন থ্রেডে আপডেট করতে যাচ্ছে। অ্যান্ড্রয়েডে আমরা অ্যান্ড্রয়েড ডেভেলপমেন্টের মূল থ্রেডে ব্যাকগ্রাউন্ড থ্রেডকে সরাসরি স্পর্শ করতে পারি না। অ্যাসিঙ্কটাস্ক ব্যাকগ্রাউন্ড থ্রেড থেকে মেইন থ্রেডের মধ্যে যোগাযোগ করতে সাহায্য করে।
AsyncTask এর পদ্ধতিগুলি
-
onPreExecute() - ব্যাকগ্রাউন্ড অপারেশন করার আগে আমাদের স্ক্রিনে কিছু দেখাতে হবে যেমন প্রোগ্রেসবার বা ব্যবহারকারীকে যেকোনো অ্যানিমেশন। আমরা doInBackground() ব্যবহার করে সরাসরি ব্যাকগ্রাউন্ড অপারেশনের সাথে যোগাযোগ করতে পারি কিন্তু সর্বোত্তম অনুশীলনের জন্য, আমাদের সমস্ত asyncTask পদ্ধতিতে কল করা উচিত।
-
DoInBackground(Params) - এই পদ্ধতিতে আমাদের ব্যাকগ্রাউন্ড থ্রেডে ব্যাকগ্রাউন্ড অপারেশন করতে হবে। এই পদ্ধতিতে ক্রিয়াকলাপগুলি কোনও মেইনথ্রেড কার্যকলাপ বা টুকরোকে স্পর্শ করা উচিত নয়৷
-
onProgressUpdate(প্রগতি…) − ব্যাকগ্রাউন্ড অপারেশন করার সময়, আপনি যদি UI-তে কিছু তথ্য আপডেট করতে চান, আমরা এই পদ্ধতিটি ব্যবহার করতে পারি।
-
onPostExecute(ফলাফল) - এই পদ্ধতিতে আমরা ব্যাকগ্রাউন্ড অপারেশন ফলাফলের UI আপডেট করতে পারি।
অসিঙ্ক টাস্কে জেনেরিক প্রকারগুলি
-
TypeOfVarArgParams − এটি কার্যকর করার জন্য কী ধরনের প্যারাম ব্যবহার করা হয় সে সম্পর্কে তথ্য রয়েছে৷
৷ -
প্রগতি মান - এতে অগ্রগতি ইউনিট সম্পর্কে তথ্য রয়েছে। ব্যাকগ্রাউন্ড অপারেশন করার সময় আমরা onProgressUpdate().
ব্যবহার করে UI-তে তথ্য আপডেট করতে পারি -
ফলাফলের মান -এতে ফলাফলের ধরন সম্পর্কে তথ্য রয়েছে।
এই উদাহরণটি দেখায় কিভাবে android-এ asyncTask ব্যবহার করতে হয়।
ধাপ 1 − অ্যান্ড্রয়েড স্টুডিওতে একটি নতুন প্রকল্প তৈরি করুন, ফাইল ⇒ নতুন প্রকল্পে যান এবং একটি নতুন প্রকল্প তৈরি করতে সমস্ত প্রয়োজনীয় বিবরণ পূরণ করুন৷
ধাপ 2 − 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" /> </LinearLayout>
উপরের xml-এ আমরা একটি বোতাম তৈরি করেছি, ব্যবহারকারী বোতামে ক্লিক করলে এটি ইমেজ ডাউনলোড করবে এবং ইমেজভিউতে ইমেজ যুক্ত করবে।
ধাপ 3 − 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.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.ImageView; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public class MainActivity extends AppCompatActivity { URL ImageUrl = null; InputStream is = null; Bitmap bmImg = null; ImageView imageView= null; ProgressDialog p; @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); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AsyncTaskExample asyncTask=new AsyncTaskExample(); asyncTask.execute("https://www.tutorialspoint.com/images/tp-logo-diamond.png"); } }); } private class AsyncTaskExample extends AsyncTask<String, String, Bitmap> { @Override protected void onPreExecute() { super.onPreExecute(); p = new ProgressDialog(MainActivity.this); p.setMessage("Please wait...It is downloading"); p.setIndeterminate(false); p.setCancelable(false); p.show(); } @Override protected Bitmap doInBackground(String... strings) { try { ImageUrl = new URL(strings[0]); HttpURLConnection conn = (HttpURLConnection) ImageUrl.openConnection(); conn.setDoInput(true); conn.connect(); is = conn.getInputStream(); BitmapFactory.Options options = new BitmapFactory.Options(); options.inPreferredConfig = Bitmap.Config.RGB_565; bmImg = BitmapFactory.decodeStream(is, null, options); } catch (IOException e) { e.printStackTrace(); } return bmImg; } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); if(imageView!=null) { p.hide(); imageView.setImageBitmap(bitmap); }else { p.show(); } } } }
উপরের কোডে আমরা asyncTask ব্যবহার করে ইমেজ ডাউনলোড করছি এবং ইমেজভিউতে ইমেজ যুক্ত করছি।
পদক্ষেপ 4৷ - manifest.xml
-এ নিম্নলিখিত কোড যোগ করুন<?xml version = "1.0" encoding = "utf-8"?> <manifest xmlns:android = "https://schemas.android.com/apk/res/android" package = "com.example.andy.myapplication"> <uses-permission android:name = "android.permission.INTERNET"/> <application android:allowBackup = "true" android:icon = "@mipmap/ic_launcher" android:label = "@string/app_name" android:roundIcon = "@mipmap/ic_launcher_round" android:supportsRtl = "true" android:theme = "@style/AppTheme"> <activity android:name = ".MainActivity"> <intent-filter> <action android:name = "android.intent.action.MAIN" /> <category android:name = "android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
উপরের AndroidManifest.xml ফাইলে আমরা ছবি ডাউনলোড করতে ইন্টারনেট অ্যাক্সেস করার জন্য ইন্টারনেট অনুমতি যোগ করেছি।
আপনার অ্যাপ্লিকেশন চালানোর চেষ্টা করা যাক. আমি ধরে নিচ্ছি আপনি আপনার কম্পিউটারের সাথে আপনার আসল অ্যান্ড্রয়েড মোবাইল ডিভাইসটি সংযুক্ত করেছেন৷ অ্যান্ড্রয়েড স্টুডিও থেকে অ্যাপটি চালাতে, আপনার প্রোজেক্টের অ্যাক্টিভিটি ফাইলগুলির একটি খুলুন এবং টুলবার থেকে রান ইক্লিপস রান আইকন আইকনে ক্লিক করুন। একটি বিকল্প হিসাবে আপনার মোবাইল ডিভাইসটি নির্বাচন করুন এবং তারপরে আপনার মোবাইল ডিভাইসটি পরীক্ষা করুন যা আপনার ডিফল্ট স্ক্রীন প্রদর্শন করবে৷
এখন ডাউনলোড বোতামে ক্লিক করুন এটি UI-তে অগ্রগতি দেখাবে এবং নীচের চিত্রের মতো ব্যাকগ্রাউন্ডে ছবি ডাউনলোড করবে
ইমেজ ডাউনলোড করার পরে, এটি নীচে দেখানো হিসাবে UI এ আপডেট হবে