অ্যাসিঙ্কটাস্ক বনাম থ্রেডে অ্যান্ড্রয়েড


135

ইউআইতে, কিছু ব্যাকগ্রাউন্ড কাজ সম্পাদন করতে, আমি পৃথক ব্যবহার করেছি Thread। তবে অন্যদের পরামর্শ অনুসারে, আমি এখন ব্যবহার করছি AsyncTask

A Threadএবং an এর মধ্যে প্রধান পার্থক্য কী AsyncTask?

কোন পরিস্থিতিতে, আমি একটি Threadবা একটি ব্যবহার করা উচিত AsyncTask?



@ ওয়েবাল্ডো.এট আমি এটিকে পুনরায় প্রকাশ করেছি, এখানে তারা অ্যাসিঙ্কটাস্ক এবং থ্রেডের মধ্যে বর্ণনা এবং পার্থক্য প্রবেশ করিয়েছে I আমি জানতে চাই উদাহরণস্বরূপ নেটওয়ার্ক সংযোগের জন্য ফাইলটি, আমি যা ব্যবহার করি তার জন্য ফাইলটি পড়ুন ?.
রাম

সংক্ষিপ্ত: থ্রেড -> ইউআই-থ্রেডে অ্যাক্সেস নেই || অ্যাসিঙ্কটাস্ক -> ইউআই-থ্রেডে শর্তসাপেক্ষ অ্যাক্সেস
জাভাডিএম

ব্যাকগ্রাউন্ড টাস্কের জন্য ইনটেন্স সার্ভিস হ'ল আরেকটি দুর্দান্ত বিকল্প।
চেন

উত্তর:


146

দীর্ঘ-চলমান বা সিপিইউ-নিবিড় কাজের জন্য মূলত এটি করার দুটি উপায় রয়েছে: জাভা থ্রেড এবং অ্যান্ড্রয়েডের নেটিভ অ্যাসিঙ্কটাস্ক।

দুজনেরই অপরটির চেয়ে অপরিহার্যভাবে ভাল নয়, তবে প্রতিটি কল কখন ব্যবহার করতে হবে তা আপনার সুবিধার জন্য সিস্টেমের কার্যকারিতা লাভবান করার জন্য প্রয়োজনীয়।

এর জন্য অ্যাসিঙ্কটাস্ক ব্যবহার করুন:

  1. সাধারণ নেটওয়ার্ক অপারেশন যার জন্য প্রচুর ডেটা ডাউনলোডের প্রয়োজন হয় না
  2. ডিস্ক-বাউন্ড টাস্ক যা কয়েক মিলিসেকেন্ডেরও বেশি সময় নিতে পারে

এর জন্য জাভা থ্রেড ব্যবহার করুন:

  1. নেটওয়ার্ক অপারেশনগুলিতে মাঝারি থেকে বড় পরিমাণে ডেটা জড়িত থাকে (হয় আপলোড বা ডাউনলোড করা)
  2. হাই-সিপিইউ কাজগুলি যা পটভূমিতে চালানো দরকার
  3. আপনি জিইউআই থ্রেডের সাথে সম্পর্কিত সিপিইউ ব্যবহার নিয়ন্ত্রণ করতে চান এমন কোনও কাজ

এবং ইন্টারনেটের মাধ্যমে প্রচুর ভাল সংস্থান রয়েছে যা আপনাকে সহায়তা করতে পারে:

http://www.vogella.com/articles/AndroidBackgroundProcessing/article.html


আমি কী জিজ্ঞাসা করতে পারি ডাউনলোডের পরিমাণের পরিমাণ কেন একটি সমস্যা?
ইয়েং

1
@ ইয়ুং মনে হচ্ছে আপনার এসিঙ্ক টাস্ক সম্পর্কে অন্তর্দৃষ্টি দরকার! দেখুন, ডেটার পরিমাণ আরও বৃহত্তর করুন তবে একই ক্রিয়াকলাপটি শেষ করতে আরও বেশি সময় লাগবে। সুতরাং নিম্নলিখিত কারণে অ্যাসিঙ্ক টাস্ক ব্যবহার করে দীর্ঘ চলমান প্রক্রিয়া করা ভাল অনুশীলন নয়: 1. অ্যাসিঙ্ক টাস্কটি কার্যকলাপের জীবনচক্রের সাথে খারাপভাবে আবদ্ধ। 2. তারা মেমোরি ফুটো তৈরি করে।
মোহিত


ধন্যবাদ. আমি এখন ঝুঁকি বুঝতে পারি।
ইয়েং

@ ইম্পাসে @ ইয়ুং আইএমও পরিমাণে ডেটা কোনও সমস্যা নয়, নেটওয়ার্ক অপারেশনগুলির মূল সমস্যাটি অপারেশনটির সময়। এমনকি কয়েক বাইট ডাউনলোড করার একটি দীর্ঘ সময় লাগতে পারে, যখন সার্ভার, অনধিগম্য (সময়সীমা সমাপ্ত) ইত্যাদি ব্যস্ত একজন ফিক্স ব্যবহার করতে হতে পারে AsyncTaskনিজের নির্ধারণকারী সঙ্গে।
xmedeko

44

আপনি যদি জাভা থ্রেড ব্যবহার করেন তবে আপনাকে নিজের কোডে নিম্নলিখিত প্রয়োজনীয়তাগুলি পরিচালনা করতে হবে:

আপনি যদি ব্যবহারকারী ইন্টারফেসে ফলাফলগুলি আবার পোস্ট করেন তবে মূল থ্রেডের সাথে সিঙ্ক্রোনাইজেশন

থ্রেড বাতিল করার জন্য কোনও ডিফল্ট নয়

কোনও ডিফল্ট থ্রেড পুলিং নেই

অ্যান্ড্রয়েডে কনফিগারেশন পরিবর্তনগুলি পরিচালনা করার জন্য কোনও ডিফল্ট নয়


3
এটি প্রকৃতপক্ষে আরও বর্ণনামূলক কারণ এটি সহজ থ্রেডগুলি ব্যবহার না করার কারণগুলি মোকাবেলা করে। আমার মনের শীর্ষ থেকে ক্রিয়াকলাপ / পরিষেবা জীবনচক্রের সাথে যে কোনও কিছু বাঁধতে হবে তার পরিবর্তে অ্যাসিঙ্কটাস্ক ব্যবহার করা উচিত, যদিও আপনাকে কার্যের ভিতরে ম্যানুয়ালি "কৃপণভাবে" হ্রাস করতে হবে, কমপক্ষে আপনি টাস্কটি ঝুলিয়ে শেষ করবেন না least যখন ক্রিয়াকলাপ নিহত হয়।
leRobot

28

সুতা

  • সাধারণভাবে দীর্ঘ কাজ
  • থ্রেড.স্টার্ট () পদ্ধতি দ্বারা আমন্ত্রণ করুন
  • যে কোনও থ্রেড থেকে ট্রিগারড
  • তার উপর সঞ্চালিত হয় নিজের থ্রেড
  • ম্যানুয়াল থ্রেড পরিচালনা / কোড পড়া কঠিন হতে পারে

AsyncTask

  • মূল থ্রেডের সাথে যোগাযোগ করা ছোট কাজ
  • উদ্দীপনা () পদ্ধতি দ্বারা আহ্বান
  • মূল থ্রেড থেকে ট্রিগারড
  • কর্মী সুত্রে চালায়
  • মূল থ্রেড থেকে কার্যকর করতে হবে এবং তৈরি করতে হবে

11

সুতা

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

একটি নতুন ক্লাস সরবরাহ করছে যা থ্রেড প্রসারিত করে এবং তার রান () পদ্ধতিটি ওভাররাইড করে। অন্যটি তার তৈরির সময় একটি রান্নেবল অবজেক্টের সাথে একটি নতুন থ্রেড ইভেন্ট সরবরাহ করছে। কোনও থ্রেডকে তার "শুরু" পদ্ধতিটি কল করে কার্যকর করা যেতে পারে। কোনও থ্রেডের "সেটপ্রাইরিটি (ইনট)" পদ্ধতিতে কল করে আপনি "অগ্রাধিকার" সেট করতে পারেন।

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

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

আপনি যদি জাভা থ্রেড ব্যবহার করেন তবে আপনার নিজের কোডে নিম্নলিখিত প্রয়োজনীয়তাগুলি পরিচালনা করতে হবে:

আপনি যদি ইউজার ইন্টারফেসে ফলাফলগুলি আবার পোস্ট করেন তবে মূল থ্রেডের সাথে সিঙ্ক্রোনাইজেশন থ্রেড বাতিল করার জন্য কোনও ডিফল্ট নয় কোনও ডিফল্ট থ্রেড পুলিং অ্যান্ড্রয়েডে কনফিগারেশন পরিবর্তনগুলি পরিচালনা করার জন্য কোনও ডিফল্ট নয়

AsyncTask

অ্যাসিঙ্কটাস্ক ইউআই থ্রেডটির যথাযথ এবং সহজ ব্যবহার সক্ষম করে। এই শ্রেণিটি থ্রেড এবং / অথবা হ্যান্ডলারগুলি পরিচালনা না করে পটভূমি ক্রিয়াকলাপ সম্পাদন করতে এবং ইউআই থ্রেডে ফলাফল প্রকাশের অনুমতি দেয়। একটি অ্যাসিঙ্ক্রোনাস টাস্ক এমন একটি গণনা দ্বারা সংজ্ঞায়িত করা হয় যা একটি পটভূমি থ্রেডে চলে এবং যার ফলাফলটি ইউআই থ্রেডে প্রকাশিত হয়।

অ্যাসিঙ্কটাস্ক নিম্নলিখিত 4 টি ধাপ অতিক্রম করবে:

onPreExecute ()

টাস্কটি কার্যকর হওয়ার আগে ইউআই থ্রেডে অনুরোধ করা হয়েছে

doInbackground (প্যারাম ..)

OnPreExecute () সম্পাদন শেষ করার পরপরই পটভূমির থ্রেডে আমন্ত্রিত।

onProgressUpdate (প্রগতি ..)

প্রোগ্রেস (অগ্রগতি ...) এ কল করার পরে ইউআই থ্রেডে আমন্ত্রণ জানানো হয়েছে।

onPostExecute (ফল)

ব্যাকগ্রাউন্ড গণনা শেষ হওয়ার পরে ইউআই থ্রেডে আমন্ত্রিত।

আপনার AsyncTask ব্যবহার করা উচিত কেন?

কোনও ইউআই থ্রেডের জন্য ব্যবহার করা সহজ। (সুতরাং, যখন কলার থ্রেডটি ইউআই থ্রেড হয় তখন এটি ব্যবহার করুন)।

হ্যান্ডলারদের কারসাজি করার দরকার নেই।

আরও তথ্যের জন্য এখানে যান


2

থ্রেড:

Threadদীর্ঘ চলমান ক্রিয়াকলাপগুলি মূল থ্রেড থেকে আলাদা করতে ব্যবহার করা উচিত যাতে কর্মক্ষমতা উন্নত হয়। তবে এটি মার্জিতভাবে বাতিল হতে পারে না এবং এটি অ্যান্ড্রয়েডের কনফিগারেশন পরিবর্তনগুলি পরিচালনা করতে পারে না। আপনি ইউআই আপডেট করতে পারবেন না Thread

AsyncTaskসময়কালীন 5 মিমি থেকে কম কাজের আইটেমগুলি পরিচালনা করতে ব্যবহার করা যেতে পারে। এর সাথে AsyncTask, আপনি জাভা থেকে ভিন্ন ইউআই আপডেট করতে পারেন Thread। তবে অনেক দীর্ঘ চলমান কার্য সম্পাদনকে দম বন্ধ করে দেবে।

এই দুটিয়ের জন্য আপনার কাছে আরও কয়েকটি বিকল্প রয়েছে।

HandlerThread / হ্যান্ডলার এবং ThreadPoolExecutor

আরও তথ্যের জন্য নীচের পোস্টটি দেখুন:

হ্যান্ডলার বনাম অ্যাসিঙ্কটাস্ক বনাম থ্রেড

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.