উদাহরণে যাওয়ার আগে, আমাদের জানা উচিত যে, asyncTask কী। AsyncTask ব্যাকগ্রাউন্ড থ্রেডে অপারেশন/অ্যাকশন করতে যাচ্ছে এবং মেইনথ্রেডে আপডেট করছে। এখানে 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" /> <ImageView android:id = "@+id/image2" android:layout_width = "300dp" android:layout_height = "300dp" /> </LinearLayout>
উপরের কোডে আমরা দুটি ইমেজভিউ এবং একটি বোতাম ঘোষণা করেছি, ব্যবহারকারী বোতামে ক্লিক করলে এটি বিভিন্ন ইন্টারনেট উত্স থেকে দুটি ছবি ডাউনলোড করবে এবং ইমেজভিউতে যুক্ত হবে।
ধাপ 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; ImageView imageView2 = null; AsyncTaskExample asyncTask = null; AsyncTaskExample2 asyncTask2 = 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); imageView2 = findViewById(R.id.image2); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { asyncTask2 = new AsyncTaskExample2(); asyncTask2.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "https://www.tutorialspoint.com/cprogramming/images/logo.png"); asyncTask = new AsyncTaskExample(); asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "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(true); 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(); } } } private class AsyncTaskExample2 extends AsyncTask<String, String, Bitmap> { @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 (imageView2 ! = null) { imageView2.setImageBitmap(bitmap); } else { } } } }
উপরের কোডে আমরা excuteOnExcutor() দিয়েছি যাতে দুই বা তার বেশি দুটি aynctask চালানো যায়। অ্যান্ড্রয়েড সমান্তরালভাবে চালানোর জন্য সর্বাধিক পাঁচটি যেকোনো কাজকে সমর্থন করবে।
পদক্ষেপ 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>
উপরের কোডে আমরা ইন্টারনেট উৎস থেকে ছবি ডাউনলোড করার জন্য ইন্টারনেট অনুমতি দিয়েছি।
আপনার অ্যাপ্লিকেশন চালানোর চেষ্টা করা যাক. আমি ধরে নিচ্ছি আপনি আপনার কম্পিউটারের সাথে আপনার আসল অ্যান্ড্রয়েড মোবাইল ডিভাইসটি সংযুক্ত করেছেন৷ অ্যান্ড্রয়েড স্টুডিও থেকে অ্যাপটি চালাতে, আপনার প্রোজেক্টের অ্যাক্টিভিটি ফাইলগুলির একটি খুলুন এবং রান ইক্লিপস রান ক্লিক করুন টুলবার থেকে আইকন। একটি বিকল্প হিসাবে আপনার মোবাইল ডিভাইস নির্বাচন করুন এবং তারপরে আপনার মোবাইল ডিভাইসটি পরীক্ষা করুন যা আপনার ডিফল্ট স্ক্রীন প্রদর্শন করবে -
ব্যবহারকারী বোতামে ক্লিক করলে, এটি নিচের চিত্রের মতো প্রগ্রেস বার ব্যবহার করে ইন্টারনেট সোর্স থেকে ছবি ডাউনলোড করবে -
এটি দুটি ছবি সমান্তরাল ডাউনলোড করবে এবং নীচে দেখানো হিসাবে প্রদর্শন করবে -