একটি তুলনা স্থানীয়, প্রক্রিয়ার মধ্যে, বেস বর্গ পরিষেবা ✱ একটি থেকে AsyncTask:
Answer (এই উত্তরটি রফতানি পরিষেবাগুলি বা ক্লায়েন্টের চেয়ে পৃথক কোনও প্রক্রিয়াতে পরিচালিত কোনও পরিষেবাকে সম্বোধন করে না, যেহেতু প্রত্যাশিত ব্যবহারের ঘটনাগুলি একটির তুলনায় যথেষ্ট আলাদা AsyncTaskAlso এছাড়াও বংশবৃদ্ধির স্বার্থে, কিছু বিশেষায়িত প্রকৃতির প্রকৃতি Serviceউপশ্রেণী (যেমন, IntentService, JobService) এখানে উপেক্ষা করা হবে।)
লাইফটাইম প্রক্রিয়া
এ Serviceওএসের কাছে প্রতিনিধিত্ব করে, "ব্যবহারকারীর সাথে আলাপচারিতা না করার সময় একটি অ্যাপ্লিকেশন দীর্ঘকাল ধরে চলমান অপারেশন করার ইচ্ছা" "[ রেফ ] ref
আপনার Serviceদৌড়ানোর সময়, অ্যান্ড্রয়েড বুঝতে পারে যে আপনি চান না যে আপনার প্রক্রিয়াটি হত্যা করা হোক। যখনই আপনার Activityঅনস্ক্রিন থাকে এটি এটিও সত্য এবং আপনি যখন অগ্রভাগের পরিষেবাটি চালাচ্ছেন এটি বিশেষত সত্য । (যখন আপনার সমস্ত অ্যাপ্লিকেশন উপাদানগুলি চলে যায়, অ্যান্ড্রয়েড মনে করে, "ওহ, এখন এই অ্যাপ্লিকেশনটি মেরে ফেলার জন্য ভাল সময়, সুতরাং আমি সংস্থানগুলি মুক্ত করতে পারি"))
এছাড়াও, থেকে প্রাপ্ত সর্বশেষ ফেরতের মূল্যের উপর নির্ভর করে Service.onCreate()অ্যান্ড্রয়েড রিসোর্স চাপ [ রেফ ] এর কারণে নিহত হওয়া অ্যাপস / পরিষেবাগুলিকে "পুনর্জীবিত" করার চেষ্টা করতে পারে ।
AsyncTasksএর কোন কিছু করবেন না আপনার কতগুলি ব্যাকগ্রাউন্ড থ্রেড চলছে, বা তারা কতটা কঠোরভাবে কাজ করছে তা বিবেচনাধীন নয়: আপনার অ্যাপটি সিপিইউ ব্যবহার করার কারণে অ্যান্ড্রয়েড আপনার অ্যাপটিকে জীবিত রাখবে না। এটি জানার কিছু উপায় থাকতে হবে যে আপনার অ্যাপটিতে এখনও কাজ করা আছে; এজন্য Servicesওএসের সাথে নিবন্ধিত রয়েছে, এবং AsyncTasksতা নয়।
Multithreading
AsyncTasks কাজগুলি করার জন্য একটি ব্যাকগ্রাউন্ড থ্রেড তৈরি করা এবং তারপরে ইউআই থ্রেডের সেই কাজের ফলাফলটি থ্রেডসেফ পদ্ধতিতে উপস্থাপন করা।
প্রতিটি নতুন AsyncTaskসম্পাদনের ফলে AsyncTasks'sথ্রেড-পুল [ রেফ ] এর সীমাবদ্ধতার সাপেক্ষে আরও সংহত (আরও থ্রেড) ফলাফল হয় ।
Serviceঅন্যদিকে, পদ্ধতিগুলি সর্বদা ইউআই থ্রেডে থাকে [ রেফ ]। এই ক্ষেত্রে প্রযোজ্য onCreate(), onStartCommand(), onDestroy(), onServiceConnected(), ইত্যাদি সুতরাং, কিছু অর্থে, Servicesনা "রান" পটভূমিতে না। একবার তারা ( onCreate()) শুরু করার পরে , তারা কেবল সেখানে "বসতে" শুরু করবে - যতক্ষণ না এটি পরিষ্কার করার, কোনও প্রয়োগ করার সময় হয় onStartCommand()etc.
অন্য কথায়, অতিরিক্ত যোগ করার Servicesফলে আরও সম্মতি হয় না। প্রচুর পরিমাণে কাজ করার জন্য পরিষেবা পদ্ধতিগুলি ভাল জায়গা নয়, কারণ তারা ইউআই থ্রেডে চলে ।
অবশ্যই, আপনি প্রসারিত করতে পারেন Service, আপনার নিজস্ব পদ্ধতি যুক্ত করতে পারেন এবং যে কোনও থ্রেড থেকে তাদের কল করতে পারেন। তবে আপনি যদি এটি করেন তবে থ্রেড সুরক্ষার জন্য দায়বদ্ধতা আপনার কাঠামোর নয়।
আপনি যদি নিজের কোনও পটভূমি থ্রেড (বা অন্য কোনও ধরণের কর্মী) যুক্ত করতে চান তবে আপনি তা করতে নির্দ্বিধায় Service। উদাহরণস্বরূপ আপনি একটি পটভূমি থ্রেড / AsyncTaskইন শুরু করতে পারেন Service.onCreate()। তবে সমস্ত ব্যবহারের ক্ষেত্রে এটির প্রয়োজন হয় না। উদাহরণ স্বরূপ:
- আপনি হয়ত
Serviceদৌড়াতে চাইবেন যাতে আপনি "ব্যাকগ্রাউন্ড" এ অবস্থান আপডেটগুলি অবিরত রাখতে পারেন (অর্থাত্ কোনও Activitiesঅনস্ক্রিন না করেই )।
- অথবা, আপনি কেবল আপনার অ্যাপটি জীবিত রাখতে চাইতে পারেন যাতে আপনি
BroadcastReceiverএকটি দীর্ঘমেয়াদী ভিত্তিতে একটি "অন্তর্নিহিত" নিবন্ধিত রাখতে পারেন (এপিআই 26 এর পরে, আপনি সর্বদা ম্যানিফেস্টের মাধ্যমে এটি করতে পারবেন না, সুতরাং আপনাকে পরিবর্তে রানটাইমে রেজিস্ট্রেশন করতে হবে [ রেফ ]]।
এই ব্যবহারের ক্ষেত্রে কোনওটিই সিপিইউ ক্রিয়াকলাপের একটি দুর্দান্ত চুক্তির প্রয়োজন হয় না; তাদের কেবলমাত্র অ্যাপ্লিকেশনটি হত্যা করা উচিত নয় ।
শ্রমিক হিসাবে
Servicesটাস্ক-ভিত্তিক নয়। এগুলি যেমন "কোনও কার্য সম্পাদন" এবং "ফলাফল সরবরাহ" করতে সেট আপ করা হয় না AsyncTasks। Servicesকোনও থ্রেড-সুরক্ষা সমস্যা সমাধান করবেন না (তবুও যে সমস্ত পদ্ধতি একত থ্রেডে কার্যকর করা হয়)। AsyncTasksঅন্যদিকে, আপনার জন্য সেই জটিলতাটি পরিচালনা করুন।
লক্ষ্য করুন AsyncTaskহয় উঠিয়ে দেওয়ার কাল । তবে এর অর্থ এই নয় যে আপনার AsyncTasksসাথে আপনার প্রতিস্থাপন করা উচিত Services! (আপনি যদি এই উত্তরটি থেকে কিছু শিখে থাকেন তবে তা অনেকটা পরিষ্কার হওয়া উচিত))
টি এল; ডিআর
Servicesবেশিরভাগ সেখানে "অস্তিত্ব" আছে। এগুলি অফ-স্ক্রিনের মতো Activity, অ্যাপ্লিকেশনটির বেঁচে থাকার কারণ সরবরাহ করে, অন্য উপাদানগুলি "কাজ" করার ক্ষেত্রে যত্ন নেয়। AsyncTasks"কাজ" করুন তবে তারা এবং তাদের মধ্যে কোনও প্রক্রিয়া বাঁচিয়ে রাখবে না।