software - android wiki




হ্যান্ডলার বনাম AsyncTask (6)

আইএমও, কমপক্ষে স্তরের বিশদ (থ্রেড, বার্তা লুপ ইত্যাদি) সম্পর্কে খুব বেশি চিন্তা না করে, Android অ্যাপ্লিকেশানগুলিতে পটভূমি প্রক্রিয়াকরণ অর্জনের জন্য একটি সুবিধাজনক, সহজে-ব্যবহারযোগ্য উপায় সরবরাহ করার জন্য অ্যাসিন টাস্ককে লেখা হয়েছিল। এটি কলব্যাক পদ্ধতিগুলি সরবরাহ করে যা কাজগুলি সময়সূচী করতে সহায়তা করে এবং যখনই প্রয়োজন হয় তখনই সহজেই UI আপডেট করতে সহায়তা করে।

যাইহোক, এটি উল্লেখ করা গুরুত্বপূর্ণ যে অ্যাসিন্ট টাস্ক ব্যবহার করার সময়, একজন বিকাশকারী তার সীমাবদ্ধতাগুলি জমা দিচ্ছে, যা ক্লাসের লেখক দ্বারা গৃহীত নকশা সিদ্ধান্তগুলির কারণে ঘটে। উদাহরণস্বরূপ, আমি সম্প্রতি খুঁজে পেয়েছি যে অ্যাসাইনসটাসগুলি ব্যবহার করে নির্ধারিত কাজগুলির একটি সীমা আছে।

হ্যান্ডলার দুইটির চেয়ে বেশি স্বচ্ছ এবং সম্ভবত আপনাকে আরো স্বাধীনতা দেয়; তাই যদি আপনি জিনিসগুলির উপর আরও নিয়ন্ত্রণ চান তবে আপনি হ্যান্ডলার চয়ন করবেন অন্যথায় AsynTask ঠিক কাজ করবে।

আমি হ্যান্ডলারের উপর অ্যাসিন্ট টাস্ক বেছে নেব যখন আমি বিভ্রান্ত। বলুন আমার কিছু কোড আছে যা আমি প্রতি সেকেন্ডে চালাতে চাই যা ইউআই আপডেট করবে। কেন আমি অন্য একটি বেছে নিতে হবে?


আপনি যদি প্রতিটি x সেকেন্ডে একটি গণনা করতে চান, তবে সম্ভবত আপনি Handler ( postDelayed() Runnable নির্ধারণ করুন এবং Runnable বর্তমান UI থ্রেডে শুরু হওয়া উচিত। যদি আপনি এটি অন্য থ্রেডে শুরু করতে চান, হ্যান্ডলার থ্রেড ব্যবহার করুন। AsyncTask আমাদের জন্য ব্যবহার করা সহজ কিন্তু হ্যান্ডলার চেয়ে ভাল।


থাম্ব আমার নিয়ম হবে:

  • যদি আপনি UI সম্পর্কিত কিছুটা বিচ্ছিন্ন করছেন, উদাহরণস্বরূপ একটি তালিকাতে উপস্থিত তথ্য ডাউনলোড করতে, এগিয়ে যান এবং AsyncTask ব্যবহার AsyncTask

  • আপনি যদি একাধিক পুনরাবৃত্তিমূলক কাজ করছেন, উদাহরণস্বরূপ ডাউনলোডের উপর ইমেজ ImageViews (থাম্বনেল ডাউনলোড করার মতো) একাধিক চিত্র ডাউনলোড করা, Handler সাথে একটি টাস্ক সারি ব্যবহার করুন।


সর্বদা নিম্নলিখিত কারণগুলির জন্য যখন সম্ভব হয় তখন AsyncTask ব্যবহার এড়াতে চেষ্টা করুন:

  • একটি থ্রেডপুল বেস এবং সর্বাধিক আকারের সিস্টেমের দ্বারা সেট করা আছে এবং Asyncask খুব বেশি তৈরি করলে AsyncTask চালানোর জন্য নিশ্চিত নয়।

  • AsyncTask স্বয়ংক্রিয়ভাবে ক্রিয়াকলাপ জীবনযাত্রার উপর নির্ভর করে চলমান এমনকি স্বয়ংক্রিয়ভাবে বন্ধ করা যেতে পারে এবং আপনি এটি উপর কোন নিয়ন্ত্রণ নেই

  • ইউআই থ্রেডে চলমান AsyncTask পদ্ধতিগুলি, PostExecute মত, ক্রিয়াকলাপটি যখন উল্লেখ করা হচ্ছে তখন এটি কার্যকর করা যেতে পারে, আর দৃশ্যমান নয়, বা সম্ভবত একটি বিন্যাস পরিবর্তনের পরে, এটি একটি ভিন্ন বিন্যাসের অবস্থায় রয়েছে।

উপসংহারে আপনি AsyncTask এর UIThread- সংযুক্ত পদ্ধতিগুলি ব্যবহার করতে পারবেন না, যা তার প্রধান সুবিধা !!! তাছাড়াও আপনি doInBackground এ শুধুমাত্র জটিল কাজ করবেন না। এই সমস্যার উপর আরো অন্তর্দৃষ্টি জন্য এই থ্রেড পড়ুন:

AsyncTask সত্যিই ধারণাগতভাবে ত্রুটিযুক্ত বা আমি শুধু কিছু অনুপস্থিত?

উপরের বিবৃতিগুলির মধ্যে কোনটি আপনার জন্য উদ্বেগের কারণ হলে AsyncTask এর পরিবর্তে ইন্টেন্ট সার্ভিস, হ্যান্ডলার থ্রেড বা থ্রেডপুল এক্সিকিউটার ব্যবহার করে অগ্রাধিকার দেওয়ার চেষ্টা করুন। এটা আরো কাজ প্রয়োজন হবে কিন্তু নিশ্চিত আপনার আবেদন নিরাপদ হবে।


AsyncTask কিছু পটভূমি কাজ শেষ হওয়ার পরে আপনি ইউআই থ্রেডে কিছু করবেন বলে মনে করেন। এছাড়াও, আপনি শুধুমাত্র একবার এটি কার্যকর করতে পারেন (এর পরে, তার স্থিতিটি শেষ হয় এবং আপনি একবার এটি কার্যকর করার জন্য একটি ব্যতিক্রম পাবেন)। এছাড়াও, এটি ব্যবহার করার নমনীয়তা অনেক না। হ্যাঁ, আপনি সমান্তরাল নির্বাহের জন্য THREAD_POOL_EXECUTOR ব্যবহার করতে পারেন, তবে প্রচেষ্টাটি যোগ্য নয়।

Handler Runnables এবং বার্তা পরিচালনা ছাড়া, কিছু মনে করেন না। এছাড়াও, আপনি চান হিসাবে অনেক বার এটি চালানো যেতে পারে । আপনি কোন থ্রেডটি সংযুক্ত করতে হবে তা নির্ধারণ করতে মুক্ত, এটি অন্য হ্যান্ডলারদের সাথে যোগাযোগ করে কিভাবে, সম্ভবত তাদের হ্যান্ডলার থ্রেড দিয়ে তৈরি করতে পারে। সুতরাং, এটি অনেক বেশি নমনীয় এবং কিছু পুনরাবৃত্তি কাজের জন্য উপযুক্ত।

here Handler উদাহরণ বিভিন্ন ধরনের পরীক্ষা করে দেখুন।


AsyncTask = থ্রেড + হ্যান্ডলার

হ্যান্ডলার - এটি একটি প্রক্রিয়া যা বার্তাগুলির একটি সারির সাথে কাজ করার অনুমতি দেয়। এটা Looper আছে কংক্রিট থ্রেড আবদ্ধ হয়।

এখানে আরও পড়ুন - https://blog.mindorks.com/android-core-looper-handler-and-handlerthread-bd54d69fe91a





android